名前空間
変種
操作

mktime

From cppreference.com
< c‎ | chrono
ヘッダー <time.h> で定義
time_t mktime( struct tm* arg );

ローカルカレンダー時刻をstruct tmオブジェクトとして正規化し、エポックからの経過時間であるtime_tオブジェクトに変換します。arg->tm_wdayおよびarg->tm_ydayは無視されます。argの値は範囲外かどうかチェックされません。

指定された時刻における夏時間(Daylight Saving Time)が有効であったかどうかを判断するために、arg->tm_isdstに負の値を指定すると、mktimeはそれを試みます。

time_tへの変換が成功した場合、argオブジェクトは変更されます。argのすべてのフィールドは、適切な範囲に収まるように更新されます。arg->tm_wdayおよびarg->tm_ydayは、他のフィールドで利用可能な情報を使用して再計算されます。

目次

[編集] パラメータ

arg - 変換するローカルカレンダー時刻を指定するtmオブジェクトへのポインタ

[編集] 戻り値

time_tオブジェクトとしてのエポックからの経過時間(成功時)、またはargtime_tオブジェクトとして表現できない場合(POSIXではこの場合errnoEOVERFLOWが格納されることも要求されます)は-1

[編集] 注記

もし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 The mktime function (p: TBD)
  • C17標準 (ISO/IEC 9899:2018)
  • 7.27.2.3 The mktime function (p: 285-286)
  • C11標準 (ISO/IEC 9899:2011)
  • 7.27.2.3 The mktime function (p: 390-391)
  • C99標準 (ISO/IEC 9899:1999)
  • 7.23.2.3 The mktime function (p: 340-341)
  • C89/C90標準 (ISO/IEC 9899:1990)
  • 4.12.2.3 The mktime function

[編集] 関連項目

エポックからの時間を、地方時で表されるカレンダー時間に変換する
(関数) [編集]
English 日本語 中文(简体) 中文(繁體)