• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

    最終更新日時(UTC):
    が更新

    履歴 編集

    class
    <chrono>

    std::chrono::local_info

    namespace std::chrono {
      struct local_info {
        static constexpr int unique = 0;
        static constexpr int nonexistent = 1;
        static constexpr int ambiguous = 2;
        int result;
        sys_info first;
        sys_info second;
      };
    }
    

    概要

    local_infoは、ローカル時間に関するタイムゾーン情報の低レベルインタフェースを提供するクラスである。

    このクラスの情報は、local_timeからsys_timeに変換する際に使用される。

    • local_timeからsys_timeへの変換が一意に決まる場合、result == uniqueとなり、firstが正しいsys_infoで埋められ、secondはゼロ初期化される
      • 存在しないローカル時間が生じる場合、result == nonexistentとなり、firstは直前のローカル時間の終端値の値で埋められ、secondは直後のローカル時間の開始値で埋められる
      • あいまいなローカル時間が生じる場合、result == ambiguousとなり、firstは直後のローカル時間の終端値で埋められ、secondは直前のローカル時間の開始値で埋められる

    備考

    • nonexistentおよびambiguousは、サマータイムを採用しているタイムゾーンで生じる可能性がある
      • 存在しないローカル時間の例として、タイムゾーン"America/New_York"のローカル時刻 2016-03-13 02:30:00 は以下の隙間に位置するため存在しえない:
        • 2016-03-13 02:00:00 EST
        • 2016-03-13 03:00:00 EDT
        • 2016-03-13 07:00:00 UTC
      • あいまいなローカル時間の例として、タイムゾーン"America/New_York"のローカル時刻 2016-11-06 01:30:00 は、以下のいずれかとなり、一意に決まらない:
        • 2016-11-06 05:30:00 UTC
        • 2016-11-06 06:30:00 UTC

    メンバ変数

    変数 説明
    unique resultがこの値である場合、local_timeからsys_timeへの変換が一意に決まる
    nonexistent resultがこの値である場合、存在しないローカル時間である
    ambiguous resultがこの値である場合、重複するローカル時間があるためlocal_timeからsys_timeへの変換が一意に決まらない
    first 変換に使用される第1候補のタイムゾーン情報
    second 変換に使用される第2候補のタイムゾーン情報

    非メンバ関数

    名前 説明 対応バージョン
    operator<< 出力ストリームへの出力 C++20

    文字列フォーマット

    名前 説明 対応バージョン
    formatter std::formatterクラスの特殊化 C++20

    #include <iostream>
    #include <chrono>
    
    namespace chrono = std::chrono;
    
    int main()
    {
      auto now = chrono::system_clock::now();
      chrono::local_time local_now{now.time_since_epoch()};
    
      // 日本のタイムゾーン
      const chrono::time_zone* tz = chrono::locate_zone("Asia/Tokyo");
      chrono::local_info li = tz->get_info(local_now);
    
      std::cout << li.result << std::endl;
    
      chrono::sys_info si = li.first;
      std::cout << chrono::floor<chrono::hours>(si.offset).count() << " hours" << std::endl; // UTCタイムゾーンからの差分時間
      std::cout << si.abbrev << std::endl; // タイムゾーンの略称
    }
    

    出力

    0
    9 hours
    JST
    

    バージョン

    言語

    • C++20

    処理系

    参照