_mkgmtime,_mkgmtime32 _mkgmtime64
將由 UTC 時間轉換為tmstruct為了 UTC 時間用來表示time_t型別。
time_t _mkgmtime(
struct tm* timeptr
);
__time32_t _mkgmtime32(
struct tm* timeptr
);
__time64_t _mkgmtime64(
struct tm* timeptr
);
參數
- timeptr
變數的指標,以 UTC 時間structtm轉換。
傳回值
型別的數量**__time32_t或__time64_t**代表秒數後 1970 年 1 月 1,在國際標準時間 (UTC) 午夜過。如果日期超出範圍 (請參閱 < 備註 > 章節) 或輸入無法解譯為有效的時間,傳回值為 – 1。
備註
_mkgmtime32和**_mkgmtime64的函式轉換的 UTC 時間__time32_t或__time64_t表示在 UTC 時間的型別。若要轉換成 UTC 時間的區域時間使用mktime**, _mktime32,以及**_mktime64**相反。
_mkgmtime是一個內嵌函式會評估結果為**_mkgmtime64**,以及time_t相當於**__time64_t**。 如果您要強制編譯器解譯time_t為舊的 32 位元time_t,您可以定義**_USE_32BIT_TIME_T**。建議您不要因為您的應用程式可能會失敗之後 2038 年 1 月 19 日 (32 位元的最大範圍time_t),且不允許在 64 位元平台上。
傳入的時間結構將會變更,如下所示,相同的方式如有變更的**_mktime函式: tm_wday和tm_yday欄位設為新值的值作為依據tm_mday和tm_year**。當指定tm結構時,設定tm_isdst欄位:
零 (0) 則表示標準時間為作用中。
大於 0 表示日光節約時間是有效的值。
值小於零到 c 執行階段文件庫程式碼來計算標準時間或日光節約時間是否有效。
C 執行階段文件庫會使用 TZ 的環境變數來決定正確的日光節約時間。如果沒有設定 TZ,作業系統會查詢以取得正確的地區日光節約時間的行為。tm_isdst為指定的欄位。如果未設定,其值是未定義和使用的傳回值mktime變得無法預期。
範圍的**_mkgmtime32函式是從 1970 年 1 月 1 日午夜 UTC 來年 1 月 19 日 3: 14: 07 以後,即 2038 年 1 UTC。 範圍的_mkgmtime64就是從 1970 年 1 月 1 日午夜 UTC 到 23: 59: 59,3000 年 12 月 31 UTC。範圍外的日期會導致傳回值為 – 1。範圍的_mkgmtime是根據_USE_32BIT_TIME_T定義。如果未定義 (預設值) 的範圍,就是_mkgmtime64**。 否則,範圍是限制為 32 位元範圍的**_mkgmtime32**。
請注意, gmtime和localtime用以轉換的單一靜態配置的緩衝區。如果您提供此緩衝區mkgmtime,先前的內容已終結。
範例
// crt_mkgmtime.c
#include <stdio.h>
#include <time.h>
int main()
{
struct tm t1, t2;
time_t now, mytime, gmtime;
char buff[30];
time( & now );
_localtime64_s( &t1, &now );
_gmtime64_s( &t2, &now );
mytime = mktime(&t1);
gmtime = _mkgmtime(&t2);
printf("Seconds since midnight, January 1, 1970\n");
printf("My time: %I64d\nGM time (UTC): %I64d\n\n", mytime, gmtime);
/* Use asctime_s to display these times. */
_localtime64_s( &t1, &mytime );
asctime_s( buff, sizeof(buff), &t1 );
printf( "Local Time: %s\n", buff );
_gmtime64_s( &t2, &gmtime );
asctime_s( buff, sizeof(buff), &t2 );
printf( "Greenwich Mean Time: %s\n", buff );
}
範例輸出
Seconds since midnight, January 1, 1970
My time: 1171588492
GM time (UTC): 1171588492
Local Time: Thu Feb 15 17:14:52 2007
Greenwich Mean Time: Fri Feb 16 01:14:52 2007
下列範例會示範如何不完整的結構已填入的一週天數和年份的日期計算的值。
// crt_mkgmtime2.c
#include <stdio.h>
#include <time.h>
#include <memory.h>
int main()
{
struct tm t1, t2;
time_t gmtime;
char buff[30];
memset(&t1, 0, sizeof(struct tm));
memset(&t2, 0, sizeof(struct tm));
t1.tm_mon = 1;
t1.tm_isdst = 0;
t1.tm_year = 103;
t1.tm_mday = 12;
// The day of the week and year will be incorrect in the output here.
asctime_s( buff, sizeof(buff), &t1);
printf("Before calling _mkgmtime, t1 = %s t.tm_yday = %d\n",
buff, t1.tm_yday );
gmtime = _mkgmtime(&t1);
// The correct day of the week and year were determined.
asctime_s( buff, sizeof(buff), &t1);
printf("After calling _mkgmtime, t1 = %s t.tm_yday = %d\n",
buff, t1.tm_yday );
}
Output
Before calling _mkgmtime, t1 = Sun Feb 12 00:00:00 2003
t.tm_yday = 0
After calling _mkgmtime, t1 = Wed Feb 12 00:00:00 2003
t.tm_yday = 42
請參閱
參考
gmtime_s,_gmtime32_s _gmtime64_s