mktime
、 _mktime32
、 _mktime64
現地時刻をカレンダーの値に変換します。
構文
time_t mktime(
struct tm *timeptr
);
__time32_t _mktime32(
struct tm *timeptr
);
__time64_t _mktime64(
struct tm *timeptr
);
パラメーター
timeptr
時間構造体へのポインター。 asctime
を参照してください。
戻り値
_mktime32
では、指定されたカレンダー時間を time_t
型の値としてエンコードして返します。 timeptr
が 1970 年 1 月 1 日の午前 0 時より前の日付を参照している場合、またはカレンダー時刻を表すことができる場合、_mktime32
は -1 キャストを返してtime_t
型を返します。 _mktime32
を使用し、timeptr
が 2038 年 1 月 18 日 23 時 59 分 59 分 59 秒より後の日付を参照する場合、協定世界時 (UTC) は-1 キャストを返し、time_t
型にキャストされます。
_mktime64
は、__time64_t
に返します。
解説
mktime
、_mktime32
、_mktime64
の各関数では、timeptr
によって示された指定の時間構造体 (不完全な場合もある) を変換し、正規化された値を持つ完全に定義された構造体にして、次にそれを time_t
カレンダー時刻値に変換します。 変換された時刻は、 time
関数によって返される値と同じエンコードを持ちます。 timeptr
構造体の tm_wday
および tm_yday
コンポーネントの元の値は無視され、他のコンポーネントの元の値はそれぞれの通常の範囲に限定されません。
mktime
は _mktime64
と同等のインライン関数ですが、_USE_32BIT_TIME_T
が定義されている場合は _mktime32
と同等になります。
_mktime32
は、UTC への調整後、UTC の 1970 年 1 月 1 日午前 0 時から 2038 年 1 月 18 日 23:59:59 までの日付を扱います。 _mktime64
は、1970 年 1 月 1 日午前 0 時から 3000 年 12 月 31 日 23:59:59 までの日付を扱います。 この調整により、指定した日付が範囲内にある場合でも、これらの関数が -1 (time_t
、__time32_t
、または __time64_t
にキャスト) を返す場合があります。 たとえば、UTC より 2 時間早いエジプトのカイロにいる場合、最初に timeptr
で指定した日付から 2 時間が減算されます。減算によって日付が範囲外になる可能性があります。
これらの関数は、tm
構造体の検証と値の設定に使用されることがあります。 成功すると、これらの関数は tm_wday
と tm_yday
の値を適切に設定し、指定されたカレンダー時間を表すように他のコンポーネントを設定します。ただし、各値は通常の範囲内に限定されます。 tm_mday
の最終的な値は、tm_mon
と tm_year
が決定されるまでは設定されません。 tm
構造体時間を指定するときは、tm_isdst
フィールドを次のように設定します。
標準時間が有効であることを示す場合はゼロ (0)。
夏時間が有効であることを示す場合は 0 より大きい値。
標準時間と夏時間のどちらが有効であるかを C ランタイム ライブラリ コードで計算する場合は 0 より小さい値。
C ランタイム ライブラリは、 TZ
環境変数から夏時間の動作を決定します。 TZ
が設定されていない場合は、オペレーティング システムから夏時間の情報を取得するために、Win32 API 呼び出しの GetTimeZoneInformation
が使用されます。 呼び出しが失敗した場合、ライブラリは、夏時間の計算を実装するための米国の規則が使用されていることを前提としています。 tm_isdst
は必須フィールドです。 設定しないと、その値は未定義になり、これらの関数からは予想外の値が返されます。 timeptr
が、以前の asctime
、gmtime
、または localtime
(またはこれらの関数のバリアント) の呼び出しによって返された tm
構造体を指す場合、tm_isdst
フィールドには正しい値が含まれています。
gmtime
およびlocaltime
(および_gmtime32
、_gmtime64
、_localtime32
、および_localtime64
) 関数は、変換にスレッドごとに 1 つのバッファーを使用します。 mktime
、_mktime32
、または _mktime64
にこのバッファーを指定すると、以前の内容は破棄されます。
これらの関数では、パラメーターの検証が行われます。 timeptr
が null ポインターである場合は、「パラメーターの検証」で説明されているとおり、無効なパラメーター ハンドラーが呼び出されます。 実行の継続が許可された場合、関数は -1 を返し、errno
を EINVAL
に設定します。
既定では、この関数のグローバル状態の適用対象は、アプリケーションになります。 この動作を変更するには、「CRT でのグローバル状態」を参照してください。
要件
ルーチンによって返される値 | 必須ヘッダー |
---|---|
mktime |
<time.h> |
_mktime32 |
<time.h> |
_mktime64 |
<time.h> |
互換性の詳細については、「 Compatibility」を参照してください。
ライブラリ
C ランタイム ライブラリのすべてのバージョン。
例
// crt_mktime.c
/* The example takes a number of days
* as input and returns the time, the current
* date, and the specified number of days.
*/
#include <time.h>
#include <stdio.h>
int main( void )
{
struct tm when;
__time64_t now, result;
int days;
char buff[80];
time( &now );
_localtime64_s( &when, &now );
asctime_s( buff, sizeof(buff), &when );
printf( "Current time is %s\n", buff );
days = 20;
when.tm_mday = when.tm_mday + days;
if( (result = mktime( &when )) != (time_t)-1 ) {
asctime_s( buff, sizeof(buff), &when );
printf( "In %d days the time will be %s\n", days, buff );
} else
perror( "mktime failed" );
}
サンプル出力
Current time is Fri Apr 25 13:34:07 2003
In 20 days the time will be Thu May 15 13:34:07 2003
関連項目
時間管理
asctime
, _wasctime
gmtime
、 _gmtime32
、 _gmtime64
localtime
、 _localtime32
、 _localtime64
_mkgmtime
、 _mkgmtime32
、 _mkgmtime64
time
、 _time32
、 _time64