Namespaces
Variants

ctime, ctime_s

From cppreference.net
定义于头文件 <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) 将给定的纪元时间转换为本地日历时间,再转换为文本表示形式,如同调用 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
bufsz - 最大输出字节数,通常为 buf 所指向缓冲区的大小

返回值

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

注释

ctime 返回指向静态数据的指针且非线程安全。此外,它会修改可能被 gmtime localtime 共享的静态 tm 对象。POSIX 将此函数标记为过时并推荐改用 strftime 。C 标准同样建议使用 strftime 替代 ctime ctime_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 函数 (页: 287-288)
  • K.3.8.2.2 ctime_s 函数 (页: 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函数(页码:342)
  • C89/C90 标准 (ISO/IEC 9899:1990):
  • 4.12.3.2 ctime 函数

参见

(C23中已弃用) (C11)
tm 对象转换为文本表示形式
(函数)
tm 对象转换为自定义文本表示形式
(函数)
C++ 文档 关于 ctime