次の方法で共有


struct tm によって表される UTC 時刻を、time_t 型で表される UTC 時刻に変換します。

構文

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

パラメーター

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

戻り値

協定世界時 (UTC) で 1970 年 1 月 1 日午前 0 時以降の経過秒数を表す、__time32_t 型または __time64_t 型の数。 日付が範囲外にある場合 (「解説」セクションを参照)、または入力が有効な時刻として解釈できない場合、戻り値は –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を定義します。 32 ビットの time_t の最大範囲である 2038 年 1 月 18 日より後にアプリケーションでエラーになる可能性があるのでお勧めしません。 64 ビット プラットフォームでは許可されません。

渡される時間の構造体は、_mktime 関数の場合と同様に次のように変更されます。tm_wday フィールドと tm_yday フィールドは tm_mdaytm_year の値に基づいて新しい値に設定されます。 時刻は UTC であると想定されるため、tm_isdst フィールドは無視されます。

_mkgmtime32 関数の範囲は、UTC の 1970 年 1 月 1 日午前 0 時から UTC の 2038 年 1 月 18 日 23 時 59 分 59 秒までです。 _mkgmtime64 の範囲は、UTC の 1970 年 1 月 1 日午前 0 時から UTC の 3000 年 12 月 31 日 23 時 59 分 59 秒までです。 範囲外の日付の場合、戻り値は –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

次の例は、_mkgmtime によって不完全な構造がどのように入力されるかを示しています。 曜日と年の両方の値が計算されます。

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

関連項目

時間管理
$
$