最終更新日時: 2024年06月11日 22時45分38秒 (JST)
Akira Takahashi が更新

履歴 編集

function
<chrono>

# std::chrono::time_zone::get_info(C++20)

    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

### 処理系

- Clang: 9.0 ❌
- GCC: 9.2 ❌
- Visual C++: 2019 Update 3 ❌