_mkgmtime、_mkgmtime32、_mkgmtime64
time_t 型で表される UTC 時刻に tmstruct によって表される 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_wday と tm_yday フィールドは tm_mday と tm_yearの値に基づいて新しい値に設定されます。tm の構造のタイミングを指定した場合、 tm_isdst フィールドをに設定します:
標準時間を適用することを示すゼロ (0)。
夏時間を適用することを示すことの値が 0。
標準時間または夏時間が有効かどうかを示す値より小さい 15 C ランタイム ライブラリ コード計算を持つより大きい。
15 C ランタイム ライブラリは正しい夏時間を決定するために TZ の環境変数を使用します。TZ が設定されていない正しい地域の夏時間の動作を取得するには、オペレーティング システムが呼び出されます。tm_isdst は必須のフィールドです。設定しない場合、値は未定義です mktime からの戻り値は予測できません。
_mkgmtime32 の関数のスコープは、深夜 1970 年 1 月 1 日 1 の UTC から 3:14 1 年 1 月 19 日のへのです: 07 2038 年の UTC。_mkgmtime64 の深夜範囲は、 1970 年 1 月 1 日 1 の UTC から 23:59 へのです: 59、 3000 12 年 1 月 31 日の UTC。範囲の日付は – 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
不完全な構造が曜日、および年の日付の計算値を設定する方法を次の例に示します。
// 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
参照
関連項目
gmtime_s、_gmtime32_s、_gmtime64_s