?
This document uses PHP Chinese website manual Release
在頭文件<time.h>中定義 | ||
---|---|---|
struct tm * gmtime(const time_t * time); | (1) | |
struct tm * gmtime_s(const time_t *限制時(shí)間,struct tm *限制結(jié)果); | (2) | (自C11以來) |
1)將歷元以來的給定時(shí)間(time_t
指向的值time
)轉(zhuǎn)換為日歷時(shí)間,以結(jié)構(gòu)tm格式中的協(xié)調(diào)世界時(shí)(UTC)表示。結(jié)果存儲在靜態(tài)存儲器中,并返回指向該靜態(tài)存儲器的指針。
2)與(1)相同,只是該函數(shù)使用用戶提供的存儲result
結(jié)果,并且在運(yùn)行時(shí)檢測到以下錯(cuò)誤并調(diào)用當(dāng)前安裝的約束處理函數(shù):
time
或者result
是空指針
與所有邊界檢查的函數(shù)一樣,gmtime_s
只有__STDC_LIB_EXT1__
在實(shí)現(xiàn)定義并且用戶在包含之前定義__STDC_WANT_LIB_EXT1__
為整數(shù)常量時(shí)1
才能保證可用time.h
。
時(shí)間 | - | 指向要轉(zhuǎn)換的time_t對象的指針 |
---|---|---|
結(jié)果 | - | 指向結(jié)構(gòu)tm對象來存儲結(jié)果的指針 |
1)tm
成功時(shí)指向靜態(tài)內(nèi)部對象的指針,否則為空指針。該結(jié)構(gòu)可以在gmtime
,localtime
和之間共享,ctime
并且可以在每次調(diào)用時(shí)被覆蓋。
2)result
指針的副本或錯(cuò)誤上的空指針(可能是運(yùn)行時(shí)約束違規(guī)或未能將指定時(shí)間轉(zhuǎn)換為UTC)
這個(gè)函數(shù)gmtime
可能不是線程安全的。
如果由于參數(shù)太大而導(dǎo)致失敗,POSIX要求此函數(shù)設(shè)置errno
為EOVERFLOW
。
POSIX定義了一個(gè)線程安全的替代gmtime_r,它與C11函數(shù)類似gmtime_s
,只是它不檢查其輸入?yún)?shù)的有效性。
#define __STDC_WANT_LIB_EXT1__ 1#include <time.h>#include <stdio.h> int main(void){ time_t t = time(NULL); printf("UTC: %s", asctime(gmtime(&t))); printf("local: %s", asctime(localtime(&t))); #ifdef __STDC_LIB_EXT1__ struct tm buf; char str[26]; asctime_s(str,sizeof str,gmtime_s(&t, &buf)); printf("UTC: %s", str); asctime_s(str,sizeof str,localtime_s(&t, &buf))); printf("local: %s", str);#endif}
輸出:
UTC: Tue Feb 17 18:12:09 2015local: Tue Feb 17 13:12:09 2015UTC: Tue Feb 17 18:12:09 2015local: Tue Feb 17 13:12:09 2015
C11標(biāo)準(zhǔn)(ISO / IEC 9899:2011):
7.27.3.3 gmtime函數(shù)(p:393-394)
K.3.8.2.3 gmtime_s函數(shù)(p:626-627)
C99標(biāo)準(zhǔn)(ISO / IEC 9899:1999):
7.23.3.3 gmtime函數(shù)(p:343)
C89 / C90標(biāo)準(zhǔn)(ISO / IEC 9899:1990):
4.12.3.3 gmtime函數(shù)