?
Ce document utilise Manuel du site Web PHP chinois Libérer
在頭文件<time.h>中定義 | ||
---|---|---|
struct tm * gmtime(const time_t * time); | (1) | |
struct tm * gmtime_s(const time_t *限制時間,struct tm *限制結果); | (2) | (自C11以來) |
1)將歷元以來的給定時間(time_t
指向的值time
)轉換為日歷時間,以結構tm格式中的協調世界時(UTC)表示。結果存儲在靜態(tài)存儲器中,并返回指向該靜態(tài)存儲器的指針。
2)與(1)相同,只是該函數使用用戶提供的存儲result
結果,并且在運行時檢測到以下錯誤并調用當前安裝的約束處理函數:
time
或者result
是空指針
與所有邊界檢查的函數一樣,gmtime_s
只有__STDC_LIB_EXT1__
在實現定義并且用戶在包含之前定義__STDC_WANT_LIB_EXT1__
為整數常量時1
才能保證可用time.h
。
時間 | - | 指向要轉換的time_t對象的指針 |
---|---|---|
結果 | - | 指向結構tm對象來存儲結果的指針 |
1)tm
成功時指向靜態(tài)內部對象的指針,否則為空指針。該結構可以在gmtime
,localtime
和之間共享,ctime
并且可以在每次調用時被覆蓋。
2)result
指針的副本或錯誤上的空指針(可能是運行時約束違規(guī)或未能將指定時間轉換為UTC)
這個函數gmtime
可能不是線程安全的。
如果由于參數太大而導致失敗,POSIX要求此函數設置errno
為EOVERFLOW
。
POSIX定義了一個線程安全的替代gmtime_r,它與C11函數類似gmtime_s
,只是它不檢查其輸入參數的有效性。
#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標準(ISO / IEC 9899:2011):
7.27.3.3 gmtime函數(p:393-394)
K.3.8.2.3 gmtime_s函數(p:626-627)
C99標準(ISO / IEC 9899:1999):
7.23.3.3 gmtime函數(p:343)
C89 / C90標準(ISO / IEC 9899:1990):
4.12.3.3 gmtime函數