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

# C 语言标准库函数 asctime_s

在头文件 time.h 中定义。
/*********************************************
 * @brief 将日历时间 struct tm 转换为 time_t
 * @param buf 返回转换为文本后的结果
 * @param bufsz 可写入 buf 的字节数 
 * @param timeptr 要被转换的时间
 * @return 错误号,0 为成功
 ********************************************/
errno_t asctime_s(char* buf, size_t bufsz, const struct tm* timeptr);

!subtitle:说明

将日历时间从 tm 转换为文本形式,格式为 Www Mmm dd hh:mm:ss yyyy\n(25 个字符)。

  • Www - 三个字母形式的英文星期名:Mon, Tue, Wed, Thu, Fri, Sat, Sun

  • Mmm - 三个字母形式的英文月份名:Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec

  • dd - 两个数字的日期

  • hh - 两个数字的小时(24 小时制)

  • mm - 两个数字的分

  • ss - 两个数字的秒

  • yyyy - 四个数字的年

!subtitle:参数

  • buf - 返回转换为文本后的结果,含结尾的 \0,不得少于 26 个字节

  • bufsz - 可写入 buf 的字节数,不应小于 26 或大于 RSIZE_MAX

  • timeptr - 要被转换的时间

!subtitle:返回值

  • 成功时返回 0

  • 失败时返回非 0 的错误号

# 示例

#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,
    };

    char buf[26];
    if (asctime_s(buf, 26, &tm) == 0)
    {
        printf("%s", buf);
    }
    else
    {
        printf("转换失败\n");
    }
    
    return 0;
}

运行结果:

Sun May 15 05:15:55 2025

# 推荐阅读

# 参考标准

  • C17 standard (ISO/IEC 9899:2018):

    • K.3.8.2.1 The asctime_s function (p: 453-454)

  • C11 standard (ISO/IEC 9899:2011):

    • K.3.8.2.1 The asctime_s function (p: 624-625)

本文 更新于: 2025-11-27 09:38:07 创建于: 2025-11-27 09:38:07