mktime、_mktime64

Visual Studio .NET 2003

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

time_t mktime(
   struct tm *timeptr 
);
__time64_t _mktime64(
   struct tm *timeptr 
);

パラメータ

timeptr
時刻構造体へのポインタ。「asctime」を参照してください。

戻り値

mktime 関数は、指定したカレンダー時刻を time_t 型の値にエンコードして返します。timeptr が 1970 年 1 月 1 日 0 時より前の日付を参照する場合、またはカレンダー時刻を表現できない場合、mktime 関数は time_t 型にキャストした -1 を返します。mktime 関数の使用時に、timeptr が世界協定時刻 (UTC: Coordinated Universal Time) の 2038 年 1 月 19 日 3 時 14 分 07 秒より後の日付を参照する場合、mktime 関数は time_t 型にキャストした -1 を返します。

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

解説

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

mktime 関数は、グリニッジ標準時 (GMT: Greenwich Mean Time) への調整後、1970 年 1 月 1 日 0 時から 2038 年 1 月 19 日 3 時 14 分 07 秒までの日付を処理します。この調整によって、範囲内の日付を指定した場合でも、mktime 関数が time_t 型にキャストした -1 を返すことがあります。たとえば、現在地が GMT より 2 時間早いエジプトのカイロでは、まず timeptr に指定した日時から 2 時間を引きます。これで日付が範囲外になることがあります。

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

  • ゼロ (0) は、標準時間であることを示します。
  • 0 より大きい値は、夏時間であることを示します。
  • 0 より小さい値に設定すると、標準時間または夏時間のどちらであるかを C ランタイム ライブラリ コードで計算します。

C ランタイム ライブラリでは、夏時間の計算に米国の規則を使用します。tm_isdst は必ず設定してください。設定しないと、値は未定義になり、mktime 関数からの戻り値は予測できません。timeptr が前の asctimegmtime、または localtime の呼び出しで返された tm 構造体を指す場合は、tm_isdst フィールドに正しい値が設定されています。

gmtime 関数と localtime 関数は、静的に割り当てられた共通のバッファを使用して変換を行います。mktime 関数でこのバッファを使用すると、以前の内容は破棄されます。

必要条件

ルーチン 必須ヘッダー 互換性
mktime <time.h> ANSI、Win 98、Win Me、Win NT、Win 2000、Win XP
_mktime64 <time.h> Win 98、Win Me、Win NT、Win 2000、Win XP

互換性の詳細については、「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;

   _time64( &now );
   when = *_localtime64( &now );
   printf( "Current time is %s\n", asctime( &when ) );
   days = 20;
   when.tm_mday = when.tm_mday + days;
   if( (result = _mktime64( &when )) != (time_t)-1 )
      printf( "In %d days the time will be %s\n", 
              days, asctime( &when ) );
   else
      perror( "_mktime64 failed" );
}

出力例

Current time is Tue Feb 12 09:57:44 2002

In 20 days the time will be Mon Mar 04 09:57:44 2002

参照

時間管理 | asctime | gmtime | localtime | time | ランタイム ルーチンおよび同等の .NET Framework 関数

表示: