次の方法で共有


_mkgmtime、_mkgmtime32、_mkgmtime64

tmstruct で表される time_t の型によって表される UTC 時刻と UTC 時刻を変換します。

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

パラメーター

  • timeptr
    変換する structtm として UTC 時刻へのポインター。

戻り値

秒数を表す型 __time32_t または __time64_t の数量が午前 1970 年 1 月 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 月 1 日 19 時以降に (32 ビット time_tの最大範囲) は失敗する可能性があるため、64 ビット プラットフォームでは許可されないため、この方法は推奨できません。

渡された時刻構造体は、_mktime 関数を変更するのと同じ方法で次のように変更され、: tm_wdaytm_yday フィールドは tm_mdaytm_yearの値に基づいて、新しい値が設定されます。 tm 構造体の時刻を指定するときは、tm_isdst フィールドに設定する:

  • 標準時間が有効であることを示す場合はゼロ (0)。

  • 夏時間が有効であることを示す場合は 0 より大きい値。

  • 標準時間と夏時間のどちらが有効であるかを C ランタイム ライブラリ コードで計算する場合は 0 より小さい値。

C のランタイム ライブラリには、正しい夏時間を決定するために TZ 環境変数を使用します。 TZ が設定されていない場合、正しい地域の夏時間動作を取得するには、オペレーティング システムが呼び出されます。 tm_isdst は必須のフィールドです。 設定しない場合は、値は未定義になり、mktime からの戻り値は予測不可能です。

_mkgmtime32 関数の範囲は、1970 年 1 月 1 日午前 1 時、UTC の 1 年 1 月 19 日 3:14 にです: 07 2038、UTC。 _mkgmtime64 の範囲は、1970 年 1 月 1 日午前 1 時、UTC から 23:59 にです: 59、3000 12 年 10 月 31 日は、UTC。 –1 の戻り値の範囲の日付の結果。 _mkgmtime の範囲は _USE_32BIT_TIME_T が定義されているかどうかによって異なります。 範囲定義されていない (既定) では、_mkgmtime64; それ以外の場合は、_mkgmtime32の 32 ビット範囲に限定されます。

gmtimelocaltime が変換の単一の静的に割り当てられるバッファーを使用することに注意してください。 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 );

}

出力

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