Namespaces
Variants

std:: asctime

From cppreference.net
< cpp ‎ | chrono ‎ | c
定义于头文件 <ctime>
char * asctime ( const std:: tm * time_ptr ) ;

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

  • Www - 来自 time_ptr - > tm_wday 的三字母英文星期缩写,取值为 Mon Tue Wed Thu Fri Sat Sun 之一。
  • Mmm - 来自 time_ptr - > tm_mon 的三字母英文月份缩写,取值为 Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 之一。
  • dd - 来自 timeptr - > tm_mday 的两位数字日期,格式如同通过 sprintf 使用 % 2d 打印所得。
  • 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 对象的指针,用于指定要打印的时间

返回值

指向静态空终止字符字符串的指针,该字符串包含日期和时间的文本表示形式。该字符串可能在 std::asctime std::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_wday timeptr->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