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 時より前の日付を参照している場合、またはカレンダー時刻を表すことができる場合は、_mktime32time_tに -1 キャストを返します。 2038 年 1 月 18 日 23 時 59 分 59 秒より後の日付を参照する場合timeptr、協定世界時 (UTC) を使用_mktime32すると、-1 キャストが返されて型time_tが返されます。

_mktime64は、UTC の 3000 年 12 月 31 日 23:59:59 以降の日付を参照する場合timeptr、型__time64_tに -1 キャストを返します。

解説

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_wdaytm_yday の値を適切に設定し、指定されたカレンダー時間を表すように他のコンポーネントを設定します。ただし、各値は通常の範囲内に限定されます。 tm_mday の最終的な値は、tm_montm_year が決定されるまでは設定されません。 tm 構造体時間を指定するときは、tm_isdst フィールドを次のように設定します。

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

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

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

C ランタイム ライブラリは、環境変数から夏時間の動作を TZ 決定します。 TZ が設定されていない場合は、オペレーティング システムから夏時間の情報を取得するために、Win32 API 呼び出しの GetTimeZoneInformation が使用されます。 呼び出しが失敗した場合、ライブラリは、夏時間の計算を実装するための米国の規則が使用されていることを前提としています。 tm_isdst は必須フィールドです。 設定しないと、その値は未定義になり、これらの関数からは予想外の値が返されます。 timeptr が、以前の asctimegmtime、または localtime (またはこれらの関数のバリアント) の呼び出しによって返された tm 構造体を指す場合、tm_isdst フィールドには正しい値が含まれています。

and localtime (および_gmtime32、、_gmtime64、、_localtime32および_localtime64) 関数はgmtime、変換にスレッドごとに 1 つのバッファーを使用します。 mktime_mktime32、または _mktime64 にこのバッファーを指定すると、以前の内容は破棄されます。

これらの関数では、パラメーターの検証が行われます。 null ポインターの場合timeptr、「パラメーターの検証」で説明されているように、無効なパラメーター ハンドラーが呼び出されます。 実行の継続が許可された場合、関数は -1 を返し、errnoEINVAL に設定します。

既定では、この関数のグローバル状態の適用対象は、アプリケーションになります。 この動作を変更するには、「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