命名空间
变体
操作

ctime, ctime_s

来自 cppreference.cn
< c‎ | chrono
定义在头文件 <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})),并且在运行时检测到以下错误并调用当前安装的 约束处理函数
  • buftimer 是空指针
  • 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 指向的缓冲区的大小

[编辑] 返回值

1) 指向静态空终止字符字符串的指针,该字符串保存日期和时间的文本表示。该字符串可能在 asctimectime 之间共享,并且可能会在每次调用这些函数中的任何一个时被覆盖。
2) 成功时返回零(在这种情况下,时间的字符串表示已写入 buf 指向的数组),失败时返回非零值(在这种情况下,终止空字符始终写入 buf[0],除非 buf 是空指针或 bufsz 为零或大于 RSIZE_MAX)。

[编辑] 注释

ctime 返回指向静态数据的指针,并且不是线程安全的。此外,它还会修改可能与 gmtimelocaltime 共享的静态 tm 对象。POSIX 标记此函数已过时,并建议使用 strftime 代替。C 标准也建议使用 strftime 代替 ctimectime_s,因为 strftime 更灵活且对区域设置敏感。

对于导致字符串长度超过 25 个字符的 time_t 值(例如,10000 年),ctime 的行为是未定义的。

[编辑] 示例

#define __STDC_WANT_LIB_EXT1__ 1
#include <time.h>
#include <stdio.h>
 
int main(void)
{
    time_t result = time(NULL);
    printf("%s", ctime(&result));
 
#ifdef __STDC_LIB_EXT1__
    char str[26];
    ctime_s(str,sizeof str,&result);
    printf("%s", str);
#endif
}

可能的输出

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