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_mday
と tm_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 ビットの範囲に制限されます。
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
次の例は、_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
関連項目
時間管理
$
$