国际访客建议访问 Primers 编程伙伴 国际版站点 > C 教程 > mktime 以获得更好的体验。

# C 语言标准库函数 mktime

在头文件 time.h 中定义。
/*********************************************
 * @brief 将日历时间 struct tm 转换为 time_t
 * @param timeptr 要被转换的时间
 * @return 转换后的时间戳
 ********************************************/
time_t mktime(struct tm* timeptr);

!subtitle:说明

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

同时重新规范化 struct tm 对象,将 timeptr->tm_wdaytimeptr->tm_yday 修改为根据其它字段信息重新计算的结果。

!subtitle:参数

  • timeptr - 要被转换的日历时间

!subtitle:返回值

  • 成功时返回转换后的时间戳

  • 失败时返回 (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-11-27 09:38:09 创建于: 2025-11-27 09:38:09