Unix时间相关的函数

涉及到的数据结构

  • 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);
相关文章
相关标签/搜索