asctime, asctime_s

来自cppreference.com
< c‎ | chrono
定义于头文件 <time.h>
char* asctime( const struct tm* time_ptr );
(1)
errno_t asctime_s(char *buf, rsize_t bufsz, const struct tm *time_ptr);
(2) (C11起)
1) 将给定的日历时间
  • time_ptr转换成下列固定的25字符文本展示:Www Mmm dd hh:mm:ss yyyy\n
  • Www - 三字母英文星期缩写,来自time_ptr->tm_wday,为MonTueWedThuFriSatSun之一。
  • Mmm - 三字母英文月份缩写,来自time_ptr->tm_mon,为JanFebMarAprMayJunJulAugSepOctNovDec之一。
  • dd - 月份日期的2位数字,来自time_ptr->tm_mday,如sprintf%2d打印的格式。
  • hh - 小时的2位数字,来自time_ptr->tm_hour,如sprintf%.2d打印的格式。
  • mm - 分的2位数字,来自time_ptr->tm_min,如sprintf%.2d打印的格式。
  • ss - 秒的2位数字,来自time_ptr->tm_sec,如sprintf%.2d打印的格式。
  • yyyy - 年的4位数字,来自time_ptr->tm_year + 1900,如sprintf%4d打印的格式。
*time_ptr的任何成员在正常范围外,则行为未定义。
若所指示的日历年份time_ptr->tm_year多于4位数字或小于1000年,则行为未定义。
此函数不支持本地化,而且换行符无法移除。
此函数修改静态存储区,而且是非线程安全的。
2)(1),除了消息被复制到用户提供的存储区buf,它保证是空终止的,且运行时会检测下列错误并调用当前安装的强制处理函数:
  • buftime_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 - 指向指定要打印的时间的struct tm对象
buf - 指向用户提供的至少有26字节长度的缓冲区
bufsz - 用户提供的缓冲区大小

[编辑] 返回值

1) 返回指针,指向静态空终止字符串,字符串保有如上描述的日期和时间的文本展示。字符串可以在asctimectime间共享,并且可以被每次对这些函数的调用重写。
2) 成功时为零,失败时为非零,失败的情况下buf[0]被设成零(除非buf是空指针或bufsz是零或大于RSIZE_MAX)。

[编辑] 注意

此函数返回指向静态数据的指针,而且是非线程安全的。POSIX将此函数标为落后,并推荐strftime以替代。C标准亦推荐用strftime替代asctimeasctime_s,因为strftime更有弹性,并且是关乎本地环境的。

POSIX限制了仅当输出字符串将长于25字符时、timeptr->tm_wdaytimeptr->tm_mon不在预期范围时,或 timeptr->tm_year超过INT_MAX-1990时是未定义行为。

一些实现把timeptr->tm_mday==0处理成上个月最后一天的含义。

[编辑] 示例

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

可能的输出:

Tue May 26 21:51:50 2015
Tue May 26 21:51:50 2015

[编辑] 参考

  • C11 standard (ISO/IEC 9899:2011):
  • 7.27.2.1 The asctime function (p: 392-393)
  • K.3.8.2.1 The asctime_s function (p: 624-625)
  • C99 standard (ISO/IEC 9899:1999):
  • 7.23.3.1 The asctime function (p: 341-342)
  • C89/C90 standard (ISO/IEC 9899:1990):
  • 4.12.3.1 The asctime function

[编辑] 参阅

struct time_t对象转换成文本展示
(函数) [edit]
struct tm对象转换成自定义文本展示
(函数) [edit]
asctimeC++文档