mktime函数
概要:
#include <time.h> time_t mktime(struct tm *timeptr);
描述:
该函数将参数timeptr指向结构中以本地时间表示的分解时间转换为与time函数返回值具有相同编码的日历时间。
结构成员tm_wday和tm_yday原始值会被忽略;其它结构成员即使超出有效范围,也会被解释,例如:结构成员tm_mday值可能大于31,会被解释为所选月份最后一天之后的天数。成功调用函数后,结构成员tm_wday和tm_yday的值会被合理设置,其它结构成员会被设置成表示指定的日历时间,但它们的值会被强制到有效范围内;在结构成员tm_mon和tm_year的值确定之前,不会设置结构成员tm_mday的值。
如果转换所使用的本地时间涉及夏令时调整(Daylight Saving Time adjustments),结构成员tm_isdst为正数或者0时,会使mktime函数按照实行夏令时或者不实行夏令时来进行转换。如果结构成员tm_isdst为负数,mktime函数尝试判断是否实行夏令时;如果认为实行夏令时,将产生与结构成员tm_isdst为正数时调用的相同结果;否则产生与结构成员tm_isdst为0时调用的相同结果。如果参数timeptr指定的时间正好是夏令时开始或者结束时跳过或者重复的那个时间,mktime函数调用结果究竟等同于tm_isdst为正数时的调用,还是等同于tm_isdst为0时的调用,ISO/IEC 9899标准未作明确规定。
如果调用成功,mktime函数会把参数timeptr指向结构中的各个成员设置成:与用计算得到的日历时间调用localtime函数返回值的成员值相同。
参数:
参数为指向struct tm类型对象的指针。
返回值:
函数返回编码为time_t类型的指定日历时间。如果日历时间无法使用time_t类型表示,或者参数timeptr指向结构的成员tm_year无法使用int类型表示,函数返回(time_t)(-1),并且不改变结构成员tm_wday的值。
范例:
|
|
结果:
假设输入:
Enter year:
1975
Enter month:
8
Enter day:
16
将输出:
August 16, 1975 is Saturday.
1970年1月1日是一个重要的时间节点,有些实现(例如:GCC、Visual Studio)对这个时间节点后的日历时间能够正常表示;但之前的日历时间不能正常表示。
相关内容:
| struct tm | 表示分解时间的结构类型。 |
| timegm | 将UTC时间表示的分解时间转换为time_t类型日历时间的函数。 |
| time_t | 表示日历时间的实数类型。 |
主要参考资料: