名前空間
変種
操作

mktime

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

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

time->tm_isdst を負の値にすると mktime は夏時間が実施中かどうかの判定を試みます。

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

目次

[編集] 引数

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

[編集] 戻り値

成功した場合は time_t オブジェクトとしてのエポックからの経過時間。 timestd::time_t オブジェクトとして表せなければ -1 (POSIX はこの場合に EOVERFLOWerrno に格納することを要求しています)。

[編集] ノート

struct tm オブジェクトが POSIX の strptime またはその同等な関数から取得された場合、 tm_isdst の値は不定であり、 mktime を呼ぶ前に明示的に設定する必要があります。

[編集]

#define _POSIX_C_SOURCE 200112L // for setenv on gcc
#include <stdlib.h>
#include <stdio.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_dst 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)

[編集] 参考文献

  • C11 standard (ISO/IEC 9899:2011):
  • 7.27.2.3 The mktime function (p: 390-391)
  • C99 standard (ISO/IEC 9899:1999):
  • 7.23.2.3 The mktime function (p: 340-341)
  • C89/C90 standard (ISO/IEC 9899:1990):
  • 4.12.2.3 The mktime function

[編集] 関連項目

エポックからの経過時間を現地時間で表したカレンダー時刻に変換します
(関数) [edit]