mktime
|
ヘッダーで定義
<time.h>
|
||
ローカルカレンダー時間を struct tm 構造体で表現されたものとして再正規化し、さらにエポックからの経過時間として time_t オブジェクトに変換します。 arg - > tm_wday および arg - > tm_yday は無視されます。 arg 内の値が範囲外であるかどうかのチェックは行われません。
arg
-
>
tm_isdst
の負の値は、
mktime
に対し、指定された時刻で夏時間が有効であったかどうかを判定するよう試みさせます。
time_t
への変換が成功した場合、
arg
オブジェクトは変更されます。
arg
の全てのフィールドは、適切な範囲に収まるように更新されます。
arg
-
>
tm_wday
および
arg
-
>
tm_yday
は、他のフィールドで利用可能な情報を使用して再計算されます。
目次 |
パラメータ
| arg | - | ローカルのカレンダー時間を指定する tm オブジェクトへのポインタ |
戻り値
エポックからの経過時間を time_t オブジェクトとして返す。成功時は経過時間、失敗時は - 1 を返す。 arg が time_t オブジェクトとして表現できない場合(POSIXではこの場合 EOVERFLOW が errno に設定されることも要求される)。
注記
struct
tm
オブジェクトがPOSIXの
strptime
または同等の関数から取得された場合、
tm_isdst
の値は不定であり、
mktime
を呼び出す前に明示的に設定する必要があります。
例
#define _POSIX_C_SOURCE 200112L // for setenv on gcc #include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { setenv("TZ", "/usr/share/zoneinfo/America/New_York", 1); // POSIX-specific struct tm tm = *localtime(&(time_t){time(NULL)}); printf("Today is %s", asctime(&tm)); printf("(DST is %s)\n", tm.tm_isdst ? "in effect" : "not in effect"); tm.tm_mon -= 100; // tm_mon is now outside its normal range mktime(&tm); // tm_isdst is not set to -1; today's DST status is used printf("100 months ago was %s", asctime(&tm)); printf("(DST was %s)\n", tm.tm_isdst ? "in effect" : "not in effect"); }
出力例:
Today is Fri Apr 22 11:53:36 2016 (DST is in effect) 100 months ago was Sat Dec 22 10:53:36 2007 (DST was not in effect)
参考文献
- C23規格 (ISO/IEC 9899:2024):
-
- 7.27.2.3 mktime関数 (p: TBD)
- C17規格 (ISO/IEC 9899:2018):
-
- 7.27.2.3 mktime関数 (p: 285-286)
- C11規格 (ISO/IEC 9899:2011):
-
- 7.27.2.3 mktime関数 (p: 390-391)
- C99規格 (ISO/IEC 9899:1999):
-
- 7.23.2.3 mktime関数 (p: 340-341)
- C89/C90標準 (ISO/IEC 9899:1990):
-
- 4.12.2.3 mktime関数
関連項目
|
(C23)
(C11)
|
エポックからの経過時間を現地時間で表した暦時間に変換する
(関数) |
|
C++ドキュメント
for
mktime
|
|