mktime
来自cppreference.com
在标头 <time.h> 定义
|
||
重整化表示成 struct tm 的本地日历时间,并将其转化成从纪元开始经过时间的 time_t 对象格式。忽略 arg->tm_wday 与 arg->tm_yday。容许 arg 中的值在其正常范围外。
arg->tm_isdst 的负值会导致 mktime
尝试确定在指定时间夏时令是否有效。
若转换到 time_t
成功,则修改 arg 会被修改。更新 arg 的所有域为符合其正确范围的值。用可用于其他域的信息重新计算 arg->tm_wday 与 arg->tm_yday。
参数
arg | - | 指向 struct tm 对象的指针,它指定要转换的本地日历时间 |
返回值
成功时返回表示从纪元开始时间的 time_t 对象,若 arg 不能表示成 time_t 对象则返回 -1 ( POSIX 亦要求此情况下存储 EOVERFLOW
于 errno 中)。
注解
若 struct tm 对象是由 POSIX strptime
或等价的函数取得的,则 tm_isdst
的值不确定,并需要在调用 mktime
前显式设置。
示例
运行此代码
#define _POSIX_C_SOURCE 200112L // 为 GCC 的 setenv #include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { setenv("TZ", "/usr/share/zoneinfo/America/New_York", 1); // POSIX 限定 struct tm tm = *localtime(&(time_t){time(NULL)}); printf("今天是 %s", asctime(&tm)); printf("(DST %s)\n", tm.tm_isdst ? "生效" : "未生效"); tm.tm_mon -= 100; // tm_mon 落在正常范围外 mktime(&tm); // tm_isdst 不被设为 -1 ;使用今日的 DST 状态 printf("100 个月前是 %s", asctime(&tm)); printf("(DST %s)\n", tm.tm_isdst ? "生效" : "未生效"); }
可能的输出:
今天是 Fri Apr 22 11:53:36 2016 (DST 生效) 100 个月前是 Sat Dec 22 10:53:36 2007 (DST 未生效)
引用
- C23 标准(ISO/IEC 9899:2024):
- 7.27.2.3 The mktime function (第 TBD 页)
- C17 标准(ISO/IEC 9899:2018):
- 7.27.2.3 The mktime function (第 285-286 页)
- C11 标准(ISO/IEC 9899:2011):
- 7.27.2.3 The mktime function (第 390-391 页)
- C99 标准(ISO/IEC 9899:1999):
- 7.23.2.3 The mktime function (第 340-341 页)
- C89/C90 标准(ISO/IEC 9899:1990):
- 4.12.2.3 The mktime function
参阅
(C23)(C11) |
将从纪元开始的时间转换成以本地时间表示的日历时间 (函数) |