Namespaces
Variants

mktime

From cppreference.net
ヘッダーで定義 <time.h>
time_t mktime ( struct tm * arg ) ;

ローカルカレンダー時間を 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関数

関連項目

エポックからの経過時間を現地時間で表した暦時間に変換する
(関数)