©
本文档使用 PHP中文网手册 发布
在头文件<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)将给定的日历时间转换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
- 月份的2位数日期,timeptr->tm_mday
如同sprintf
使用时一样打印%2d
hh
- 从使用timeptr->tm_hour
时打印两位小时sprintf%.2d
mm
-从2位分钟timeptr->tm_min
仿佛印刷通过sprintf
使用%.2d
ss
-来自2位第二timeptr->tm_sec
仿佛印刷通过sprintf
使用%.2d
yyyy
- 从使用timeptr->tm_year + 1900
时打印出来的4位数年份sprintf%4d
如果任何成员*time_ptr
超出其正常范围,则行为不确定
如果指示的日历年份time_ptr->tm_year
超过4位或小于1000 年,则行为不明确。
该函数不支持本地化,并且不能删除换行符。
该函数修改静态存储并且不是线程安全的。
2)与(1)相同,不同之处在于消息被复制到用户提供的存储器中buf
,并保证以null结尾,并且在运行时检测到以下错误并调用当前安装的约束处理函数:
buf
或者time_ptr
是空指针
bufsz
小于26或大于 RSIZE_MAX
并非所有成员*time_ptr
都在正常范围内
指示的年份time_ptr->tm_year
小于0或大于9999
作为所有的边界检查函数,asctime_s
只有在被__STDC_LIB_EXT1__
实现定义并且用户在包含之前定义__STDC_WANT_LIB_EXT1__
为整数常量时1
才能保证可用time.h
。
time_ptr | - | 指向指定打印时间的tm对象的指针 |
---|---|---|
BUF | - | 指向用户提供的缓冲区的指针,长度至少为26个字节 |
bufsz | - | 用户提供的缓冲区的大小 |
1)指向一个静态的以null结束的字符串的指针,该字符串保存如上所述的日期和时间的文本表示。该字符串可以在asctime
和之间共享ctime
,并且可以在每次调用这些函数时被覆盖。
2)成功为零,失败时为非零,在这种情况下buf[0]
设置为零(除非buf
是空指针或者bufsz
零或大于RSIZE_MAX
)。
该函数返回一个指向静态数据的指针,并且不是线程安全的。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
意味着前一个月的最后一天。
#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 2015Tue May 26 21:51:50 2015
C11标准(ISO / IEC 9899:2011):
7.27.2.1 asctime函数(p:392-393)
K.3.8.2.1 asctime_s函数(p:624-625)
C99标准(ISO / IEC 9899:1999):
7.23.3.1 asctime函数(p:341-342)
C89 / C90标准(ISO / IEC 9899:1990):
4.12.3.1 asctime函数