asctime, asctime_s
来自cppreference.com
在标头 <time.h> 定义
|
||
(1) | ||
char* asctime( const struct tm* time_ptr ); |
(C23 前) | |
[[deprecated]] char* asctime( const struct tm* time_ptr ); |
(C23 起) | |
errno_t asctime_s( char* buf, rsize_t bufsz, const struct tm* time_ptr ); |
(2) | (C11 起) |
1) 转换日历时间 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 的 2 位月之日,如同由 sprintf 以 %2d 打印hh
——来自 timeptr->tm_hour 的 2 位时,如同由 sprintf 以 %.2d 打印mm
——来自 timeptr->tm_min 的 2 位分,如同由 sprintf 以 %.2d 打印ss
——来自 timeptr->tm_sec 的 2 位秒,如同由 sprintf 以 %.2d 打印yyyy
——来自 timeptr->tm_year + 1900 的 4 位年,如同由 sprintf 以 %4d 打印
若 *time_ptr 的任何成员在其正常范围外则行为未定义
若 time_ptr->tm_year 所指示的历年拥有多于 4 位数或小于 1000 年则行为未定义。
函数不支持本地化,且不能移除换行符。
函数修改静态存储且非线程安全。
此函数被弃用且不应被用于新的代码。
|
(C23 起) |
2) 同 (1) ,除了写入消息到用户提供的存储
buf
中,保证它是空终止的。且在运行是检测下列错误并调用当前安装的制约处理函数:
-
buf
或time_ptr
为空指针 -
bufsz
小于 26 或大于 RSIZE_MAX - 不是所有 *time_ptr 的成员都在其正常范围内
- time_ptr->tm_year 所指示的年小于 0 或大于 9999
-
- 同所有边界检查函数,
asctime_s
仅若实现定义 __STDC_LIB_EXT1__ 且用户在包含time.h
前定义 __STDC_WANT_LIB_EXT1__ 为整数常量 1 才保证可用。
参数
time_ptr | - | 指向指定待打印时间的 tm 对象的指针 |
buf | - | 指向用户提供的至少有 26 字节的缓冲区的指针 |
bufsz | - | 用户提供的缓冲区大小 |
返回值
2) 成功时为零,失败时为非零,并设置 buf[0] 为零(除非
buf
为空指针或 bufsz
为零或大于 RSIZE_MAX )。注解
asctime
返回指向静态数据的指针从而不是线程安全的。 POSIX 标记此函数为过时并推荐用 strftime 代替。 C 标准亦推荐用 strftime 代替 asctime
与 asctime_s
,因为 strftime
更灵活且为本地环境相关。
POSIX 限制未定义行为仅为当输出字符串将会长于 25 个字符、当 timeptr->tm_wday
或 timeptr->tm_mon
不在期待范围内,或当 timeptr->tm_year
超出 INT_MAX-1990 。
一些实现处置 timeptr->tm_mday==0 为表示前一月的最后一日。
示例
运行此代码
可能的输出:
Tue May 26 21:51:50 2015 Tue May 26 21:51:50 2015
引用
- C17 标准(ISO/IEC 9899:2018):
- 7.27.2.1 The asctime function (第 287 页)
- K.3.8.2.1 The asctime_s function (第 453-454 页)
- C11 标准(ISO/IEC 9899:2011):
- 7.27.2.1 The asctime function (第 392-393 页)
- K.3.8.2.1 The asctime_s function (第 624-625 页)
- C99 标准(ISO/IEC 9899:1999):
- 7.23.3.1 The asctime function (第 341-342 页)
- C89/C90 标准(ISO/IEC 9899:1990):
- 4.12.3.1 The asctime function
参阅
(C23 中弃用)(C11) |
将 struct time_t 对象转换成文本表示 (函数) |
将 struct tm 对象转换成自定义文本表示 (函数) |