time_t,该对象中存放的是距离 1970-01-01 00:00:00 +0000 (UTC) 所通过的秒数.数据结构
struct tm,该对象中存放的是具体的日期值,包括年,月,日,时,分,秒,等等.以下:函数
struct tm { int tm_sec; /* 秒数,[0,60],取 60 的缘由是可能存在润秒的缘故 */ int tm_min; /* 分钟,[0,59] */ int tm_hour;/* 小时,[0,23] */ int tm_mday;/* 日期数,[1,31] */ int tm_mon;/* 距离一月的月数,[0,11],即当为0时,代表是 1 月. */ int tm_year;/* 距离 1900 所通过的年数,即当前实际年份为 tm_year+1900 */ int tm_wday;/* 距离周日的天数,[0,6],即当为0时,代表是周日 */ int tm_yday;/* 距离 1 月 1 号的天数,[0,365] */ int tm_isdst;/* 是不是夏令时,若<0,代表该域信息不可用,若=0,代表没有采用夏令时,若>0,代表采用了夏令时 */ };
time(),从内核中取出当前时间,能够使用 gettimeofday() 获取更精确的时间.(参考 man 手册)
spa
gmtime(),localtime(),将 time_t 类型的对象格式化为 struct tm 类型.(参考 man 手册)
code
mktime().将 struct tm 类型的对象格式化为 time_t 类型,该函数具体见下:对象
/** * 将 struct tm 类型格式化为 time_t 类型. * tm 做为输入/输出参数: * 在输入时,将忽略 tm_wday,tm_yday 域,而且若 tm_isdst<0,此时 mktime() 内部本身判断是否使用了夏令时,若 tm_isdst >0,代表采用了夏令时,不然未采用夏令时. * 在输出时,若 tm_sec,tm_min,...,tm_year 的值超出范围,则会规范化,如 10月40号会被规范为 11月9号;tm_wday,tm_yday 会从新计算.tm_isdst 会从新设置代表是否使用了夏令时. * 若 tm 包括的信息没法转化为 time_t 类型,则 tm 各域的值保持不变,而且返回 -1. */ time_t mktime(struct tm *tm);