ctime, ctime_s
来自 cppreference.cn
定义在头文件 <time.h> |
||
(1) | ||
char* ctime( const time_t* timer ); |
(直到 C23) | |
[[deprecated]] char* ctime( const time_t* timer ); |
(自 C23 起) | |
errno_t ctime_s( char *buf, rsize_t bufsz, const time_t* timer ); |
(2) | (自 C11 起) |
1) 将给定的自 epoch 以来的时间转换为日历本地时间,然后再转换为文本表示,如同调用 asctime(localtime(timer)) 或 asctime(localtime_r(timer, &(struct tm){0}))(自 C23 起)。 此函数已弃用,不应在新代码中使用。(自 C23 起)
2) 与 (1) 相同,除了该函数等效于 asctime_s(buf, bufsz, localtime_s(timer, &(struct tm){0})),并且在运行时检测到以下错误并调用当前安装的 约束处理函数
-
buf
或timer
是空指针 -
bufsz
小于 26 或大于 RSIZE_MAX
-
- 与所有边界检查函数一样,仅当实现定义了 __STDC_LIB_EXT1__ 并且用户在包含 <time.h> 之前将 __STDC_WANT_LIB_EXT1__ 定义为整数常量 1 时,才能保证
ctime_s
可用。
结果字符串具有以下格式
Www Mmm dd hh:mm:ss yyyy\n
Www
- 星期几 (Mon
,Tue
,Wed
,Thu
,Fri
,Sat
,Sun
之一)。Mmm
- 月份 (Jan
,Feb
,Mar
,Apr
,May
,Jun
,Jul
,Aug
,Sep
,Oct
,Nov
,Dec
之一)。dd
- 月份中的日期hh
- 小时mm
- 分钟ss
- 秒yyyy
- 年
该函数不支持本地化。
目录 |
[编辑] 参数
timer | - | 指向 time_t 对象的指针,指定要打印的时间 |
buf | - | 指向大小至少为 bufsz 的 char 数组的第一个元素的指针 |
bufsz | - | 要输出的最大字节数,通常是 buf 指向的缓冲区的大小 |
[编辑] 返回值
2) 成功时返回零(在这种情况下,时间的字符串表示已写入
buf
指向的数组),失败时返回非零值(在这种情况下,终止空字符始终写入 buf[0],除非 buf
是空指针或 bufsz
为零或大于 RSIZE_MAX)。[编辑] 注释
ctime
返回指向静态数据的指针,并且不是线程安全的。此外,它还会修改可能与 gmtime 和 localtime 共享的静态 tm 对象。POSIX 标记此函数已过时,并建议使用 strftime 代替。C 标准也建议使用 strftime 代替 ctime
和 ctime_s
,因为 strftime
更灵活且对区域设置敏感。
对于导致字符串长度超过 25 个字符的 time_t 值(例如,10000 年),ctime
的行为是未定义的。
[编辑] 示例
运行此代码
可能的输出
Tue May 26 21:51:03 2015 Tue May 26 21:51:03 2015
[编辑] 参考文献
- C17 标准 (ISO/IEC 9899:2018)
- 7.27.3.2 ctime 函数 (p: 287-288)
- K.3.8.2.2 ctime_s 函数 (p: 454)
- C11 标准 (ISO/IEC 9899:2011)
- 7.27.3.2 ctime 函数 (p: 393)
- K.3.8.2.2 ctime_s 函数 (p: 626)
- C99 标准 (ISO/IEC 9899:1999)
- 7.23.3.2 ctime 函数 (p: 342)
- C89/C90 标准 (ISO/IEC 9899:1990)
- 4.12.3.2 ctime 函数
[编辑] 参见
(在 C23 中已弃用)(C11) |
将 tm 对象转换为文本表示 (函数) |
将 tm 对象转换为自定义文本表示 (函数) | |
C++ 文档 关于 ctime
|