?
? ????? 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
轉(zhuǎn)換為以下固定的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位數(shù)日期,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位數(shù)年份sprintf%4d
如果任何成員*time_ptr
超出其正常范圍,則行為是不確定的
如果指示的time_ptr->tm_year
日歷年份超過4位或小于1000 年,則行為不明確。
該函數(shù)不支持本地化,并且不能刪除換行符。
The function modifies static storage and is not thread-safe.
2)與(1)相同,不同之處在于消息被復(fù)制到用戶提供的存儲器buf
中,并保證以 null 結(jié)尾,并且在運行時檢測到以下錯誤并調(diào)用當前安裝的約束處理函數(shù):
buf
或者time_ptr
是空指針
bufsz
小于26或大于 RSIZE_MAX
并非所有成員*time_ptr
都在正常范圍內(nèi)
指示的年份time_ptr->tm_year
小于0或大于9999
作為所有邊界檢查函數(shù),asctime_s
只有在被__STDC_LIB_EXT1__
實現(xiàn)定義__STDC_WANT_LIB_EXT1__
并且1
在包含time.h
之前用戶定義為整數(shù)常量時才能保證可用。
time_ptr | - | 指向指定打印時間的tm對象的指針 |
---|---|---|
buf | - | 指向用戶提供的緩沖區(qū)的指針,長度至少為26個字節(jié) |
bufsz | - | 用戶提供的緩沖區(qū)的大小 |
1)指向一個靜態(tài)的以 null 結(jié)束的字符串的指針,持有如上所述的日期和時間的文本表示。該字符串可以在asctime
和ctime
之間共享,并且可以在每次調(diào)用任何這些函數(shù)時被覆蓋。
2)成功為零,失敗時為非零,在這種情況下buf[0]
設(shè)置為零(除非buf
是空指針或者bufsz
零或大于RSIZE_MAX
)。
該函數(shù)返回一個指向靜態(tài)數(shù)據(jù)的指針,并且不是線程安全的。POSIX將此功能標記為廢棄,并推薦strftime
使用。C標準也建議strftime
而不要使用asctime
,asctime_s
因為strftime
它更靈活且對語言環(huán)境敏感。
POSIX 限制未定義的行為僅限于輸出字符串超過25個字符,timeptr->tm_wday
或timeptr->tm_mon
不在預(yù)期范圍內(nèi)或當timeptr->tm_year
超過時INT_MAX-1990
。
一些實現(xiàn)處理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 函數(shù)(p:392-393)
K.3.8.2.1 asctime_s 函數(shù)(p:624-625)
C99標準(ISO / IEC 9899:1999):
7.23.3.1 asctime 函數(shù)(p:341-342)
C89 / C90標準(ISO / IEC 9899:1990):
4.12.3.1 asctime 函數(shù)