C++常用的函数在<ctime>中(或time.h)
1,数据结构
表示时间的数据结构有三个:time_t , tm和timeval
time_t = long int, 用来表示绝对时间
tm是一个struct,里边有如下成员: tm_sec(秒), tm_min(分),tm_hour(小时),tm_mday(天/月),tm_mon(月),tm_year(年),tm_wday(星期),tm_yday(天/年),tm_isdst(夏时制)
timeval只有linux才有,定义在sys/time.h中, 优点是能精确到微秒, 也是一个struct, 有两个成员tv_sec和tv_usec
还有一个clock_t,其实跟time_t一样 是个长整形
2,常用函数:
获取时间:
time()定义: time_t time (time_t* timer);获取绝对时间, 参数为空返回当前时间,不为空更新参数为当前时间, 常见的用法:
time_t t=time(NULL); 或:time(&t)
clock()获取CPU时间, 具体原理不很懂~ 与time()的区别在于不计入sleep的时间, 另外它的计量单位是微秒,意味着更加准确
gettimeofday()定义:int gettimeofday(struct timeval *tv, struct timezone *tz);这个是只有linux才有的(include sys/time.h),tz一般不用,好处是timeval可以精确到微秒,可以看做是一个精确版的time(), 当然也没有time方便
功能函数:
difftime(): double difftime (time_t end, time_t beginning);很好用的函数,注意第一个参数是end,第二个才是start, 否则会返回一个负值
转换函数: 几个数据结构和字符串之间的互转
互转: time_t--> tm: localtimestruct tm * localtime (const time_t * timer);
tm-->time_t:mktimetime_t mktime (struct tm * timeptr);
转成字符串:
这两个函数的坑爹之处在于后面自带了一个\n,导致非常不好用. 是作者YY了用户想法结果弄巧成拙的典型范例, 所以写程序(尤其是基础库)最好只提供基础的,必需的服务,扩展之类的东西放到更高更接近应用的层面去做
tm格式:asctimechar* asctime (const struct tm * timeptr);
time_t格式:ctimechar* ctime (const time_t * timer)
好在有办法补救:还有一个格式化字符串的函数strftime
size_t strftime (char* ptr, size_t maxsize, const char* format,const struct tm* timeptr );
ptr是字符串指针,
maxsize是字符串最大长度,防止越界(其实我觉得没有更好)
format是格式化字符,常用的格式:%S,%M.%H:秒,分,时%d, %m, %y:日,月,年
timeptr是tm格式的时间
返回字符串长度(不溢出)或0(溢出)
注:现在各个时间函数已经都包括在iostream中,并成为名字空间std的一员. 例如 std::time_t