次の方法で共有


local_info 構造体

local_timesys_time に変換した結果についてのタイム ゾーン情報への低レベルのインターフェイスを提供します。

構文

struct local_info;

メンバー

機能 説明
result 変換の結果を記述するコード。
first, second 変換の結果。

メンバー定数

名前 内容
unique 0 変換の結果は一意です。
nonexistent 1 local_time を変換するための対応する sys_time は存在しません。
ambiguous 2 変換の結果があいまいです。

非メンバー

機能 説明
operator<< local_info をストリームに出力します。

result

local_timesys_time に変換した結果。

int result;

戻り値

結果は次のいずれかの値になる場合があります。

  • unique: local_timesys_time に正常に変換されました。
  • nonexistent: local_time から sys_time へのマッピングは存在しません。
  • ambiguous: local_time が夏時間と標準時間の間の切り替え中になるため、2 つの sys_time 値に変換される場合があります。

解説

firstsecondresult に基づいて設定する方法については、firstsecond に関する次のセクションを参照してください。

first, second

local_timesys_time に変換した結果を提供します。

sys_seconds begin;
sys_seconds end;

戻り値

firstsecond は、次のように result に基づいて設定されます。

result first second
unique sys_time に変換された local_time の値を格納します ゼロ初期化
nonexistent local_time の直前に終了する sys_info local_time の直後から始まる sys_info
ambiguous local_time の直後に終了する sys_info local_time の直前に開始する sys_info

ambiguous 結果コード

秋の夏時間から標準時への移行中に、時計は基本的に 1 時間余分に進みます。 これは、標準時への移行によって 1 時間が失われるように思われるため、混乱を招く可能性があります。 1 時間戻すことにより、移行前の時間は、時計が標準時に調整された後に繰り返されます。 ニューヨークでの標準時への変更について考えてみましょう。これは 11 月の最初の日曜日の午前 2 時に発生します。 まず、午前 1 時が過ぎます。 午前 2 時に時計は標準時に移行するため、もう一度午前 1 時になります。 つまり、午前 1 時から午前 2 時までの時間は繰り返され、事実上 1 時間が加算されます。 例については、「ambiguous_local_time」を参照してください。

local_time がこの "追加分の" 1 時間の時間を指定した場合、変換方法は明確ではありません。 変換された時刻を、1 回目に発生した "最初の" 時間または "2 回目" の時間のどちらとして扱う必要があるでしょうか。 列挙型 choose を指定してどちらにするかが指定されていない場合は、resultambiguous に設定され、local_time が変換される可能性のある 2 つの選択肢が firstsecond に反映されると予測します。

nonexistent 結果コード

春の標準時間から夏時間への移行中、時計は基本的に 1 時間を失います。 これは、夏時間への移行によって 1 時間増えるように思われるため、混乱を招く可能性があります。 "夏時間への切り替え" で 1 時間進めることで、移行後の 1 時間は実質的に削除されます。 ニューヨークで夏時間を変更することについて考えます。これは、3 月の第 2 日曜日に午前 2 時に行われます。 午前 2 時に、時計は夏時間に移行し、午前 3 時 00 分になります。 たとえば、変換される local_time が午前 2 時 30 分の場合、その時間は "削除" された期間に含まれるので、resultnonexistent コードが含まれると予測されます。 例については、「nonexistent_local_time」を参照してください。

例: local_info の取得

// compile using: /std:c++latest
#include <iostream>
#include <chrono>

using namespace std::chrono;

int main()
{
    const auto& timeZoneDatabase = get_tzdb();
    const auto& currentZone = timeZoneDatabase.current_zone();

    local_time<system_clock::duration> lt = currentZone->to_local(system_clock::now());

    auto localInfo = currentZone->get_info(lt);

    std::cout << "local_time: " << lt << "\n";
    std::cout << localInfo << "\n";

    return 0;
}
local_time: 2021-09-08 15:37:57.6853963
result: unique, first: (begin: 2021-03-14 10:00:00, end: 2021-11-07 09:00:00, offset: -25200s, save: 60min, abbrev: PDT)

必要条件

ヘッダー:<chrono>

名前空間std::chrono:

コンパイラ オプション:/std:c++latest

<chrono>
ambiguous_local_time の例外
choose 列挙型
file_clock クラス
high_resolution_clock
local_t 構造体
non_existent の例外
system_clock 構造体
tai_clock クラス
utc_clock クラス
ヘッダー ファイル リファレンス