?
This document uses PHP Chinese website manual Release
在頭文件<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以來(lái)) |
1)將給定的日歷時(shí)間轉(zhuǎn)換tm
為以下固定的25個(gè)字符格式的文本表示形式:Www Mmm dd hh:mm:ss yyyy\n
Www
-本周三字母縮寫(xiě)英文從當(dāng)天time_ptr->tm_wday
的一個(gè)Mon
,Tue
,Wed
,Thu
,Fri
,Sat
,Sun
。
Mmm
-三個(gè)字母的縮寫(xiě)英文月份名稱從time_ptr->tm_mon
,一Jan
,Feb
,Mar
,Apr
,May
,Jun
,Jul
,Aug
,Sep
,Oct
,Nov
,Dec
。
dd
- 月份的2位數(shù)日期,timeptr->tm_mday
如同sprintf
使用時(shí)一樣打印%2d
hh
- 從使用timeptr->tm_hour
時(shí)打印兩位小時(shí)sprintf%.2d
mm
-從2位分鐘timeptr->tm_min
仿佛印刷通過(guò)sprintf
使用%.2d
ss
-來(lái)自2位第二timeptr->tm_sec
仿佛印刷通過(guò)sprintf
使用%.2d
yyyy
- 從使用timeptr->tm_year + 1900
時(shí)打印出來(lái)的4位數(shù)年份sprintf%4d
如果任何成員*time_ptr
超出其正常范圍,則行為不確定
如果指示的日歷年份time_ptr->tm_year
超過(guò)4位或小于1000 年,則行為不明確。
該函數(shù)不支持本地化,并且不能刪除換行符。
該函數(shù)修改靜態(tài)存儲(chǔ)并且不是線程安全的。
2)與(1)相同,不同之處在于消息被復(fù)制到用戶提供的存儲(chǔ)器中buf
,并保證以null結(jié)尾,并且在運(yùn)行時(shí)檢測(cè)到以下錯(cuò)誤并調(diào)用當(dāng)前安裝的約束處理函數(shù):
buf
或者time_ptr
是空指針
bufsz
小于26或大于 RSIZE_MAX
并非所有成員*time_ptr
都在正常范圍內(nèi)
指示的年份time_ptr->tm_year
小于0或大于9999
作為所有的邊界檢查函數(shù),asctime_s
只有在被__STDC_LIB_EXT1__
實(shí)現(xiàn)定義并且用戶在包含之前定義__STDC_WANT_LIB_EXT1__
為整數(shù)常量時(shí)1
才能保證可用time.h
。
time_ptr | - | 指向指定打印時(shí)間的tm對(duì)象的指針 |
---|---|---|
BUF | - | 指向用戶提供的緩沖區(qū)的指針,長(zhǎng)度至少為26個(gè)字節(jié) |
bufsz | - | 用戶提供的緩沖區(qū)的大小 |
1)指向一個(gè)靜態(tài)的以null結(jié)束的字符串的指針,該字符串保存如上所述的日期和時(shí)間的文本表示。該字符串可以在asctime
和之間共享ctime
,并且可以在每次調(diào)用這些函數(shù)時(shí)被覆蓋。
2)成功為零,失敗時(shí)為非零,在這種情況下buf[0]
設(shè)置為零(除非buf
是空指針或者bufsz
零或大于RSIZE_MAX
)。
該函數(shù)返回一個(gè)指向靜態(tài)數(shù)據(jù)的指針,并且不是線程安全的。POSIX將此功能標(biāo)記為廢棄,并推薦strftime
使用。C標(biāo)準(zhǔn)也建議strftime
不要使用asctime
,asctime_s
因?yàn)?code>strftime它更靈活且對(duì)語(yǔ)言環(huán)境敏感。
POSIX限制未定義的行為僅限于輸出字符串長(zhǎng)度超過(guò)25個(gè)字符,timeptr->tm_wday
或timeptr->tm_mon
不在預(yù)期范圍內(nèi)或timeptr->tm_year
超過(guò)時(shí)INT_MAX-1990
。
一些實(shí)現(xiàn)處理timeptr->tm_mday==0
意味著前一個(gè)月的最后一天。
#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標(biāo)準(zhǔn)(ISO / IEC 9899:2011):
7.27.2.1 asctime函數(shù)(p:392-393)
K.3.8.2.1 asctime_s函數(shù)(p:624-625)
C99標(biāo)準(zhǔn)(ISO / IEC 9899:1999):
7.23.3.1 asctime函數(shù)(p:341-342)
C89 / C90標(biāo)準(zhǔn)(ISO / IEC 9899:1990):
4.12.3.1 asctime函數(shù)