std::asctime
来自cppreference.com
在标头 <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
—— 2 位月内日期,来自 timeptr->tm_mday,如同 sprintf 用 %2d 打印hh
—— 2 位小时,来自 timeptr->tm_hour,如同 sprintf 用 %.2d 打印mm
—— 2 位分,来自 timeptr->tm_min,如同 sprintf 用 %.2d 打印ss
—— 2 位秒,来自 timeptr->tm_sec,如同 sprintf 用 %.2d 打印yyyy
—— 4 位年,来自 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 输出: 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) |
按照指定格式格式化并输出日期/时间值 (函数模板) |