命名空间
变体
操作

std::asctime

来自 cppreference.com
< cpp‎ | chrono‎ | c
 
 
工具库
语言支持
类型支持 (基本类型,RTTI)
库功能测试宏 (C++20)
动态内存管理
程序工具
协程支持 (C++20)
可变参数函数
调试支持
(C++26)
三方比较
(C++20)
(C++20)(C++20)(C++20)
(C++20)(C++20)(C++20)
通用工具
日期和时间
函数对象
格式化库 (C++20)
(C++11)
关系运算符 (C++20 中已弃用)
整数比较函数
(C++20)(C++20)(C++20)   
(C++20)
交换类型操作
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
通用词汇类型
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
基本字符串转换
(C++17)
(C++17)

 
 
 
定义在头文件 <ctime>
char* asctime( const std::tm* time_ptr );

将给定的日历时间 std::tm 转换为以下固定 25 个字符形式的文本表示形式:Www Mmm dd hh:mm:ss yyyy\n.

  • Www - 来自 time_ptr->tm_wday 的星期几的英文缩写,为 MonTueWedThuFriSatSun 之一。
  • Mmm - 来自 time_ptr->tm_mon 的英文月份缩写,为 JanFebMarAprMayJunJulAugSepOctNovDec 之一。
  • dd - 从 timeptr->tm_mday 获取的两位数月份,如同使用 %2dsprintf 打印一样。
  • hh - 从 timeptr->tm_hour 获取的两位数小时,如同使用 sprintf 打印 %.2d 一样。
  • mm - 从 timeptr->tm_min 获取的两位数分钟,如同使用 sprintf 打印 %.2d 一样。
  • ss - 从 timeptr->tm_sec 获取的两位数秒,如同使用 sprintf 打印 %.2d 一样。
  • yyyy - 从 timeptr->tm_year + 1900 获取的四位数年份,如同使用 sprintf 打印 %4d 一样。

如果 *time_ptr 的任何成员超出其正常范围,则行为未定义。

如果由 time_ptr->tm_year 指示的日历年超过 4 位数或小于 1000 年,则行为未定义。

该函数不支持本地化,并且无法删除换行符。

该函数修改静态存储,并且不是线程安全的。

内容

[编辑] 参数

time_ptr - 指向指定要打印时间的 std::tm 对象的指针

[编辑] 返回值

指向包含日期和时间文本表示形式的静态以 null 结尾的字符字符串的指针。该字符串可能在 std::asctimestd::ctime 之间共享,并且可能在每次调用这些函数中的任何一个函数时被覆盖。

[编辑] 说明

此函数返回指向静态数据的指针,并且不是线程安全的。POSIX 将此函数标记为已弃用,并建议改为使用与区域设置相关的 std::strftime。在 std::locale("C") 中,std::strftime 格式字符串 "%c\n" 将完全匹配 std::asctime 的输出,而在其他区域设置中,格式字符串 "%a %b %e %H:%M:%S %Y\n" 将是可能的更接近的匹配,但并非总是完全匹配。

POSIX 将未定义的行为限制在以下情况:当输出字符串的长度超过 25 个字符时,当 timeptr->tm_wdaytimeptr->tm_mon 不在预期范围内时,或者当 timeptr->tm_year 超过 INT_MAX-1990 时。

一些实现将timeptr->tm_mday == 0 视为前一个月的最后一天。

[编辑] 示例

#include <ctime>
#include <iomanip>
#include <iostream>
 
int main()
{
    const std::time_t now = std::time(nullptr);
 
    for (const char* localeName : {"C", "en_US.utf8", "de_DE.utf8", "ja_JP.utf8"})
    {
        std::cout << "locale " << localeName << ":\n" << std::left;
        std::locale::global(std::locale(localeName));
 
        std::cout << std::setw(40) << "    asctime" << std::asctime(std::localtime(&now));
 
        // strftime output for comparison:
        char buf[64];
        if (strftime(buf, sizeof buf, "%c\n", std::localtime(&now)))
            std::cout << std::setw(40) << "    strftime %c" << buf;
 
        if (strftime(buf, sizeof buf, "%a %b %e %H:%M:%S %Y\n", std::localtime(&now)))
            std::cout << std::setw(40) << "    strftime %a %b %e %H:%M:%S %Y" << buf;
 
        std::cout << '\n';
    }
}

可能的输出

locale C:
    asctime                             Wed Nov  4 00:45:01 2020
    strftime %c                         Wed Nov  4 00:45:01 2020
    strftime %a %b %e %H:%M:%S %Y       Wed Nov  4 00:45:01 2020
 
locale en_US.utf8:
    asctime                             Wed Nov  4 00:45:01 2020
    strftime %c                         Wed 04 Nov 2020 12:45:01 AM UTC
    strftime %a %b %e %H:%M:%S %Y       Wed Nov  4 00:45:01 2020
 
locale de_DE.utf8:
    asctime                             Wed Nov  4 00:45:01 2020
    strftime %c                         Mi 04 Nov 2020 00:45:01 UTC
    strftime %a %b %e %H:%M:%S %Y       Mi Nov  4 00:45:01 2020
 
locale ja_JP.utf8:
    asctime                             Wed Nov  4 00:45:01 2020
    strftime %c                         2020年11月04日 00時45分01秒
    strftime %a %b %e %H:%M:%S %Y       水 11月  4 00:45:01 2020

[编辑] 另请参阅

std::time_t 对象转换为文本表示。
(函数) [编辑]
std::tm 对象转换为自定义文本表示。
(函数) [编辑]
(C++11)
根据指定的格式格式化和输出日期/时间值。
(函数模板) [编辑]
C 文档 对于 asctime