mktime
来自 cppreference.cn
定义于头文件 <time.h> |
||
将表示为 struct tm 对象的本地日历时间标准化,并将其转换为自 epoch 以来经过的时间(以 time_t 对象表示)。 arg->tm_wday 和 arg->tm_yday 会被忽略。 arg 中的值不会检查是否超出范围。
arg->tm_isdst 的负值会导致 mktime
尝试确定在指定时间是否实行夏令时。
如果成功转换为 time_t
,则会修改 arg 对象。arg 的所有字段都会更新以适应其正确的范围。 arg->tm_wday 和 arg->tm_yday 会使用其他字段中可用的信息重新计算。
目录 |
[编辑] 参数
arg | - | 指向 tm 对象的指针,指定要转换的本地日历时间 |
[编辑] 返回值
成功时,返回自 epoch 以来经过的时间(以 time_t 对象表示),如果 arg 无法表示为 time_t 对象,则返回 -1(在这种情况下,POSIX 还要求将 EOVERFLOW
存储在 errno 中)。
[编辑] 注释
如果 struct tm 对象是从 POSIX strptime
或等效函数获得的,则 tm_isdst
的值是不确定的,需要在调用 mktime
之前显式设置。
[编辑] 示例
运行此代码
#define _POSIX_C_SOURCE 200112L // for setenv on gcc #include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { setenv("TZ", "/usr/share/zoneinfo/America/New_York", 1); // POSIX-specific struct tm tm = *localtime(&(time_t){time(NULL)}); printf("Today is %s", asctime(&tm)); printf("(DST is %s)\n", tm.tm_isdst ? "in effect" : "not in effect"); tm.tm_mon -= 100; // tm_mon is now outside its normal range mktime(&tm); // tm_isdst is not set to -1; today's DST status is used printf("100 months ago was %s", asctime(&tm)); printf("(DST was %s)\n", tm.tm_isdst ? "in effect" : "not in effect"); }
可能的输出
Today is Fri Apr 22 11:53:36 2016 (DST is in effect) 100 months ago was Sat Dec 22 10:53:36 2007 (DST was not in effect)
[编辑] 参考
- C23 标准 (ISO/IEC 9899:2024)
- 7.27.2.3 mktime 函数 (p: 待定)
- C17 标准 (ISO/IEC 9899:2018)
- 7.27.2.3 mktime 函数 (p: 285-286)
- C11 标准 (ISO/IEC 9899:2011)
- 7.27.2.3 mktime 函数 (p: 390-391)
- C99 标准 (ISO/IEC 9899:1999)
- 7.23.2.3 mktime 函数 (p: 340-341)
- C89/C90 标准 (ISO/IEC 9899:1990)
- 4.12.2.3 mktime 函数
[编辑] 参见
(C23)(C11) |
将自 epoch 以来经过的时间转换为表示为本地时间的日历时间 (函数) |
C++ 文档 for mktime
|