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
- 从 timeptr->tm_mday 获取的两位数月份,如同使用 %2d 由 sprintf 打印一样。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::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
|