#C 语言标准库函数 mktime
/*********************************************
* @brief 将日历时间 struct tm 转换为 time_t
* @param timeptr 要被转换的时间
* @return 转换后的时间戳
********************************************/
time_t mktime(struct tm* timeptr);
说明
将日历时间从本地时间的结构体 tm 转换为时间戳 time_t
。
同时重新规范化 struct tm
对象,将 timeptr->tm_wday
和 timeptr->tm_yday
修改为根据其它字段信息重新计算的结果。
参数
timeptr
- 要被转换的日历时间
返回值
- 成功时返回转换后的时间戳
- 失败时返回
(time_t)(-1)
#示例
#include <stdio.h>
#include <time.h>
int main(void)
{
struct tm tm = {
.tm_year = 125, // 2025 年
.tm_mon = 4, // 5 月
.tm_mday = 15,
.tm_hour = 5,
.tm_min = 15,
.tm_sec = 55,
};
time_t t = mktime(&tm);
printf("%d-%d-%d %d:%d:%d 的时间戳为 %zu\n", 1900 + tm.tm_year, 1 + tm.tm_mon, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec, (size_t)(t));
printf("那天是那周的第 %d 天,是那年的第 %d 天\n", tm.tm_wday + 1, tm.tm_yday + 1);
return 0;
}
运行结果:
2025-5-15 5:15:55 的时间戳为 1747286155 那天是那周的第 5 天,是那年的第 135 天
#推荐阅读
#参考标准
- C23 standard (ISO/IEC 9899:2024):
- 7.29.2.3 The mktime function (p: TBD)
- C17 standard (ISO/IEC 9899:2018):
- 7.27.2.3 The mktime function (p: 285-286)
- C11 standard (ISO/IEC 9899:2011):
- 7.27.2.3 The mktime function (p: 390-391)
- C99 standard (ISO/IEC 9899:1999):
- 7.23.2.3 The mktime function (p: 340-341)
- C89/C90 standard (ISO/IEC 9899:1990):
- 4.12.2.3 The mktime function