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
型time_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_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
フィールドには正しい値が含まれています。
and localtime
(および_gmtime32
、、_gmtime64
、、_localtime32
および_localtime64
) 関数はgmtime
、変換にスレッドごとに 1 つのバッファーを使用します。 mktime
、_mktime32
、または _mktime64
にこのバッファーを指定すると、以前の内容は破棄されます。
これらの関数では、パラメーターの検証が行われます。 null ポインターの場合timeptr
、「パラメーターの検証」で説明されているように、無効なパラメーター ハンドラーが呼び出されます。 実行の継続が許可された場合、関数は -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
フィードバック
https://aka.ms/ContentUserFeedback。
近日公開予定: 2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub イシューを段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、以下を参照してください:フィードバックの送信と表示