C++标准库——时间相关
来源:互联网 发布:动态壁纸软件情侣 编辑:程序博客网 时间:2024/05/20 05:56
1. time.h和ctime
功能:提供了跨平台支持的时间处理函数,满足了一般通用的时间处理相关操作。
1.time.h
C语言中的原生支持的跨平台时间和日期处理函数以及类型定义。之所以强调跨平台,就是因为这些函数和类型定义的通用性。
类型定义:
typedef long time_t; //定义了当前时间和日期到1970年1月1日的秒数typedef long clock_t; //时钟的滴答数,用来标识处理器时间struct tm{ int tm_sec; /* Seconds: 0-59 (K&R says 0-61?) */ int tm_min; /* Minutes: 0-59 */ int tm_hour; /* Hours since midnight: 0-23 */ int tm_mday; /* Day of the month: 1-31 */ int tm_mon; /* Months *since* january: 0-11 */ int tm_year; /* Years since 1900 */ int tm_wday; /* Days since Sunday (0-6) */ int tm_yday; /* Days since Jan. 1: 0-365 */ int tm_isdst; /* +1 Daylight Savings Time, 0 No DST, -1 don't know */};
上述定义确定了基本时间处理的单位。另外提供了常用的基本时间处理函数,均是语言内置的原生提供。
clock_t clock (void); //返回处理器当前时钟滴答数time_t time (time_t*); //将当前时间戳放置在传入的指针time_t参数中,同时也返回这个时间戳double difftime (time_t, time_t); //比较两个time_t时间戳的差time_t mktime (struct tm*); //传入tm日期时间结构,返回对应的时间戳char* asctime (const struct tm*); //将tm日期时间结构转换为字符串表示,字符串为标准格林威治时间字符串char* ctime (const time_t*); //将time_t时间戳转为标准格林威治时间字符串struct tm* gmtime (const time_t*); //将时间戳转为格林威治时区的tm结构struct tm* localtime (const time_t*); //将时间戳转为本地时区的tm结构size_t strftime (char*, size_t, const char*, const struct tm*); //第一个为保存的字符串,第二个参数为字符串长度,第三个为格式化时间字符串,最后一个是tm结构。将tm结构表示的时间信息按照格式化字符串保存到指定的字符串中
上述定义去掉了编译器所需的宏定义,仅给出函数原型。这些函数也是其他很多基于C语言实现的语言中原生支持的时间处理函数。
2.ctime
功能:与time.h相同
ctime是C++对C语言中的time.h头文件的封装,简单包含了time.h头文件,并将所有全局的时间处理函数放置在了std命名空间内:
namespace std{ using ::clock_t; using ::time_t; using ::tm; using ::clock; using ::difftime; using ::mktime; using ::time; using ::asctime; using ::ctime; using ::gmtime; using ::localtime; using ::strftime;}
C++建议使用ctime头文件,这样避免了命名污染。
3.实例
time_t now;time_t ret = time(&now);cout << now << '|' << ret << endl;double diff = difftime(res, now);cout << diff << endl;struct tm * tms = gmtime(&now);char * timestr = ctime(&now);cout << timestr << '|' << tms->tm_year << endl;char * timestr2 = asctime(&now);cout << timestr2<<endl;time_t mkt = mktime(tms);cout << mkt << endl;char buf[60];size_t n = strftime(buf, 60, "%Y-%m-%d %H:%M:%S", tms);cout << buf << endl;
1449542726 | 1449542726
0
Tue Dec 8 10:45:26 2015 | 115
Tue Dec 8 10:45:26 2015
1449542726
2015-12-8 10:45:26
ctime和time.h头文件中的时间处理用于日常应用,基本可以满足需求,最小时间单位为秒。但是如果需要使用精确的计时处理函数,可以使用clock函数结合处理器的频率来进行。
2.sys/time.h和sys/utime.h
通用的clock函数在处理精确计时问题时任然显得不太全面,这时就需要结合操作系统特有的API接口进行。sys/time.h和sys/utime.h就是linux系统提供的精确到微妙级的计时头文件。
1.sys/time.h
功能:提供了linux系统下精度到微妙级别的计时函数和类型定义。
定义类型:
struct timeval { long tv_sec; long tv_usec;};struct timezone{ int tz_minuteswest; /* of Greenwich */ int tz_dsttime; /* type of dst correction to apply */};
提供的唯一函数就是gettimeofday,获取当前时间精确到微妙的函数:
int gettimeofday(struct timeval *, void * /*tzp (unused)*/);
第一个参数给出保存当前时间的timeval结构指针,第二个参数未使用,一般传入NULL即可。
除了上述函数外,还定义了三个宏函数,分别是timerisset,timercmp和timerclear。分别用来控制系统内部的计时器。
2.sys/utime.h
功能:utime()用来修改参数filename文件所属的inode存取时间。
struct utimbuf{ time_t actime; //文件访问时间 time_t modtime; //文件修改时间};int utime (const char*, struct utimbuf*);
第一个参数为文件路径名称字符串,第二个为指定修改的时间结构指针。此函数的操作以及执行它所要求的特权取决于buf参数是否为NULL。
1. 如果参数buf为空指针(NULL),则该文件的存取时间和更改时间全部会设为目前时间。为了执行此操作必须满足下列两个条件之一:进程的有效ID必须等于该文件的所有者ID;或者进程对该文件必须具有写权限
2. 如果参数buf为非空指针,则访问和修改文件被设置为buf所指向结构中的值。此时,进程的有效用户ID必须等于该文件的所有者ID,或者进程必须是一个超级用户进程。对文件具有写权限是不够的。
执行成功则返回0,失败返回-1,错误代码存于errno:
- EACCESS 存取文件时被拒绝,权限不足
- ENOENT 指定的文件不存在。
- C++标准库——时间相关
- C标准库时间函数
- [C++STDlib基础]关于日期时间的操作——C++标准库头文件<ctime>
- C 标准库获取当前系统时间
- C标准库中的时间函数
- c语言中相关标准
- C语言时间相关
- c/c++时间相关
- Linux C 时间相关
- date命令相关的时间标准
- C标准库——assert.h
- C标准库——assert.h
- C 标准库—— assert.h
- C 标准库——scanf
- C标准库——程序员等级
- C语言——标准库
- C 标准库——<cmath>
- C 标准库—— math.h
- Android Studio 快捷键中英文对译
- SQL数据库对某一字段下的值进行求和,然后倒序排序
- 欢迎使用CSDN-markdown编辑器
- 位域初识
- javascript 导出div为图片PNG,div转svg,svg转canvas
- C++标准库——时间相关
- android(cm11)状态栏源码分析(一)
- javascript中window.event事件用法详解
- Strategy Pattern 策略模式
- 自定义jstl fn函数fns
- Android RecyclerView 使用完全解析 体验艺术般的控件
- julia :谈循还,row 与 col who first?
- Spring AOP 事务管理
- 返回键的处理,以及退出程序