1798

9 分钟

#C 语言标准库函数 mktime

/********************************************* * @brief 将日历时间 struct tm 转换为 time_t * @param timeptr 要被转换的时间 * @return 转换后的时间戳 ********************************************/ time_t mktime(struct tm* timeptr);

说明

将日历时间从本地时间的结构体 tm 转换为时间戳 time_t

同时重新规范化 struct tm 对象,将 timeptr->tm_wdaytimeptr->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

创建于 2025/10/16

更新于 2025/10/16