共用方式為


_mkgmtime、_mkgmtime32、_mkgmtime64

轉換 tm 表示 UTC 時間的 struct 至 time_t 型別表示的 UTC 時間。

time_t _mkgmtime( 
   struct tm* timeptr 
); 
__time32_t _mkgmtime32( 
   struct tm* timeptr 
); 
__time64_t _mkgmtime64( 
   struct tm* timeptr 
);

參數

  • timeptr
    為 UTC 時間的指標當做 struct 轉換成 tm

傳回值

一個純量型別表示秒數的 __time32_t__time64_t ,從 1970 年 1 月 1 日以來所經過的,格式為 Coordinated Universal Time (UTC)。 如果日期超出範圍 (請參閱 < 備註 > 一節) 或輸入無法解譯為有效,則傳回值為– 1。

備註

_mkgmtime32_mkgmtime64 函式轉換 UTC 時間表示 UTC 的 __time32_t__time64_t 型別時間。 要轉換為本地時間為 UTC 時間,請使用 mktime_mktime32_mktime64

_mkgmtime_mkgmtime64time_t的評估與 __time64_t相等的內嵌函式。 如果您需要強制編譯器解譯 time_t做為舊 32 位元 , time_t您可以定義**_USE_32BIT_TIME_T**。 並不建議這麼做,因為您的應用程式可能在 2038 年 1 月 19 日之後無法使用 (32 位元 time_t的最大範圍),因此,它不能在 64 位元平台執行。

如下變更傳遞的時間,因此,以將這些變更與 _mktime 函式類似的方式: tm_wdaytm_yday 欄位設定為根據 tm_mdaytm_year之值的新值。 當指定 tm 結構的時間時,設定 tm_isdst 欄位:

  • 零 (0) 表示標準時間生效。

  • 大於 0 的值表示日光節約時間在作用中。

  • 小於零的值為 C 執行階段程式庫程式碼計算標準時間或日光節約時間是否為作用中。

C 執行階段程式庫使用 TZ 環境變數判斷正確的日光節約時間。 如果 TZ 未設定,作業系統會查詢取得正確的地方日光節約時間行為。 遺漏必要的 tm_isdst。 如果未設定,則它的值未定義,且從mktime的傳回值是無法預期的。

_mkgmtime32 函式的範圍是從午夜, 1970 年 1 月 1 日的 3:14,到 1 月 19 日, UTC: 07 日 2038, UTC。 _mkgmtime64 的範圍是從午夜, 1970 年 1 月 1 日的 23:59,到 UTC: 59, 3000 年 12 月 31 日,, UTC。 已超出範圍的日期導致傳回值– 1。 _mkgmtime 的範圍取決於 _USE_32BIT_TIME_T 是否已定義。 如果沒有定義 (預設) 範圍是 _mkgmtime64;否則,這個範圍僅限於 32 位元 _mkgmtime32的範圍。

請注意 gmtimelocaltime 使用單一靜態配置轉換的緩衝區。 如果您提供這個緩衝區給 mkgmtime、_mktime32或 ,則會終結目前的內容。

範例

// 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

請參閱

參考

時間管理

asctime、_wasctime

asctime_s、_wasctime_s

gmtime、_gmtime32、_gmtime64

gmtime_s、_gmtime32_s、_gmtime64_s

localtime_s、_localtime32_s、_localtime64_s

mktime、_mktime32、_mktime64

time、_time32、_time64