• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

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

    履歴 編集

    function
    <chrono>

    std::chrono::time_zone::get_info

    template <class Duration>
    sys_info get_info(const sys_time<Duration>& st) const;     // (1) C++20
    
    template <class Duration>
    local_info get_info(const local_time<Duration>& tp) const; // (2) C++20
    

    概要

    タイムゾーンの情報を取得する。

    • (1) : システム時間からローカル時間に変換する際に使用するタイムゾーンの情報を取得する
    • (2) : ローカル時間からシステム時間に変換する際に使用するタイムゾーンの情報を取得する

    戻り値

    • (1) : システム時間の時間点st[i.begin, i.end)の範囲内にあるsys_info型オブジェクトiを返す
    • (2) : tp用のlocal_info型オブジェクトを返す

    #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::sys_info si = tz->get_info(now);
      std::cout << chrono::floor<chrono::hours>(si.offset).count() << " hours" << std::endl; // UTCタイムゾーンからの差分時間
      std::cout << si.abbrev << std::endl; // タイムゾーンの略称
    
      // ローカル時間からシステム時間に変換する際に使用するタイムゾーンを取得
      chrono::local_info li = tz->get_info(local_now);
      if (li.result == chrono::local_info::unique) {
        chrono::sys_info si2 = li.first;
        std::cout << chrono::floor<chrono::hours>(si2.offset).count() << " hours" << std::endl;
      }
      else {
        // ローカル時間が存在しないか、あいまい
        std::cout << "local time doesn't exist or ambiguous." << std::endl;
      }
    }
    

    出力

    9 hours
    JST
    9 hours
    

    バージョン

    言語

    • C++20

    処理系