次の方法で共有


mktime、_mktime32、_mktime64

更新 : 2007 年 11 月

現地時刻をカレンダー値に変換します。

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 を返します。_mktime32 を使用し、timeptr が世界協定時刻 (UTC) 2038 年 1 月 19 日 3 時 14 分 7 秒以降を参照する場合、この関数は time_t 型にキャストした –1 を返します。

_mktime64 関数は、timeptr が世界協定時刻 (UTC) の 3000 年 12 月 31 日 23 時 59 分 59 秒以降の日付を参照する場合、__time64_t 型にキャストした -1 を返します。

解説

mktime_mktime32、および _mktime64 関数は、timeptr が指す時刻構造体 (不完全な場合もあります) を正規化された値を持つ完全に定義された構造体に変換し、さらにその構造体を time_t 型のカレンダー時刻値に変換します。変換された時刻は、time 関数から返される値と同じ形式です。timeptr 構造体の tm_wdaytm_yday の元の値は無視されます。その他の構成要素の元の値は、通常の範囲内にある必要はありません。

_USE_32BIT_TIME_T が定義されていない場合、mktime_mktime64 と同じインライン関数です。定義されている場合は _mktime32 と同じです。

UTC に調整すると、_mktime32 では、1970 年 1 月 1 日午前 0 時から 2038 年 1 月 19 日 3 時 14 分 7 秒までの日付を処理します。_mktime64 では、1970 年 1 月 1 日午前 0 時から 3000 年 12 月 31 日 23 時 59 分 59 秒の日付を処理します。この調整によって、この 2 つの関数は、指定した日付が範囲内の場合でも、time_t__time32_t、または __time64_t にキャストトされた -1 を返すことがあります。たとえば、現在地が UTC より 2 時間早いエジプトのカイロでは、まず timeptr に指定した日時から 2 時間を引きます。これによって、日付が範囲外になることがあります。

これらの関数は、tm 構造体を検証して値を入力するために使用できます。成功した場合、関数は tm_wdaytm_yday の値を適切に設定し、他の構成要素を指定したカレンダー時刻を表すように設定します。ただし、これらの値は通常の範囲に制限されます。tm_mday の最終的な値は、tm_montm_year が決まるまで設定されません。tm 構造体の時刻を指定するときには、tm_isdst フィールドを次のように設定します。

  • ゼロ (0) は、標準時間であることを示します。

  • 0 より大きい値は、夏時間であることを示します。

  • 0 より小さい値に設定すると、C ランタイム ライブラリ コードは標準時間または夏時間のどちらが有効であるかを判定します。

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

gmtimelocaltime (および _gmtime32_gmtime64_localtime32_localtime64) は、1 スレッドあたり 1 つのバッファを使用して変換を行います。mktime_mktime32、または _mktime64 関数でこのバッファを使用すると、以前の内容は破棄されます。

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

必要条件

ルーチン

必須ヘッダー

mktime

<time.h>

_mktime32

<time.h>

_mktime64

<time.h>

互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。

ライブラリ

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

.NET Framework の相当するアイテム

System::DateTime::DateTime

参照

参照

時間管理

asctime、_wasctime

gmtime、_gmtime32、_gmtime64

localtime、_localtime32、_localtime64

time、_time32、_time64