次の方法で共有


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は、が UTC 3000 年 12 月 31 日 23:59:59 以降の日付を参照する場合、-1 キャストを型__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_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 フィールドには正しい値が含まれています。

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

これらの関数では、パラメーターの検証が行われます。 timeptr が null ポインターである場合は、「パラメーターの検証」で説明されているとおり、無効なパラメーター ハンドラーが呼び出されます。 実行の継続が許可された場合、関数は -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