std:: asctime
|
定义于头文件
<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
|
|