Namespaces
Variants

std:: mktime

From cppreference.net
< cpp ‎ | chrono ‎ | c
ヘッダーで定義 <ctime>
std:: time_t mktime ( std:: tm * time ) ;

ローカルのカレンダー時間をエポックからの経過時間として std::time_t オブジェクトに変換します。 time - > tm_wday および time - > tm_yday は無視されます。 time 内の値は通常の範囲外でも許可されます。

time - > tm_isdst の値が負の場合、 mktime は夏時間が有効であったかどうかを判定しようと試みます。

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

目次

パラメータ

time - ローカルのカレンダー時間を指定する std::tm オブジェクトへのポインタ

戻り値

エポックからの経過時間を std::time_t オブジェクトとして成功時に返す。または - 1 を返す( time std::time_t オブジェクトとして表現できない場合)。

注記

std::tm オブジェクトが std::get_time またはPOSIXの strptime から取得された場合、 tm_isdst の値は不定であり、 mktime を呼び出す前に明示的に設定する必要があります。

ローカルタイムを明示的に構築します。

#include <ctime>
#include <iomanip>
#include <iostream>
#include <sstream>
int main()
{
    setenv("TZ", "/usr/share/zoneinfo/America/Los_Angeles", 1); // POSIX固有
    std::tm tm{}; // ゼロ初期化
    tm.tm_year = 2020 - 1900; // 2020年
    tm.tm_mon = 2 - 1; // 2月
    tm.tm_mday = 15; // 15日
    tm.tm_hour = 10;
    tm.tm_min = 15;
    tm.tm_isdst = 0; // 夏時間ではない
    std::time_t t = std::mktime(&tm); 
    std::tm local = *std::localtime(&t);
    std::cout << "local: " << std::put_time(&local, "%c %Z") << '\n';
}

出力例:

local: Sat Feb 15 10:15:00 2020 PST

関連項目

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