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

履歴 編集

function
<chrono>

# std::chrono::tzdb::locate_zone(C++20)

    namespace std::chrono {
      const time_zone* locate_zone(std::string_view tz_name) const;
    }

## 概要

指定した名前のタイムゾーンを取得する。

この関数には、タイムゾーンデータベースに登録されているタイムゾーンを、「地域/地名」の形式で指定して取得する。

## 戻り値

- タイムゾーンリストの要素である`time_zone`型オブジェクト`tz`に対して`tz.name() == tz_name`が`true`である`tz`へのポインタを返す。
- そのようなオブジェクトが見つからない場合、タイムゾーンリンクの要素である`time_zone_link`型オブジェクト`link`に対して`link.name() == tz_name`が`true`である要素に対して、`tz.name() == link.target()`が`true`である`tz`へのポインタを返す

## 例外

該当する名前のタイムゾーンが見つからない場合、`std::runtime_error` 例外を送出する

## 備考

- この関数は例外を送出する状況以外では、常に有効な`time_zone`オブジェクトへのポインタを返す

## 例

    #include <iostream>
    #include <chrono>

    namespace chrono = std::chrono;

    int main()
    {
      const chrono::tzdb& tzdb = chrono::get_tzdb();
      // 日本のタイムゾーン (UTC + 9時間)
      const chrono::time_zone* tz = tzdb.locate_zone("Asia/Tokyo");
      std::cout << tz->name() << std::endl;

      // アメリカのタイムゾーン。
      // 地名内のスペースは、アンダースコアに変換されている
      std::cout << tzdb.locate_zone("America/New_York")->name() << std::endl;

      // 標準時のタイムゾーン。
      // 正式なタイムゾーン名は "Etc/UTC" と "Etc/GMT" だが、
      // より短い名前が (リンクとして) 定義されている
      std::cout << tzdb.locate_zone("UTC")->name() << std::endl;
      std::cout << tzdb.locate_zone("GMT")->name() << std::endl;

      // キプロス共和国の首都ニコシアはアジアに属するが、
      // 多くのユーザーはヨーロッパで見つかることを期待している。
      // ニコシアは、ヨーロッパとアジアどちらでも見つかるようリンクされており、
      // 現在の正式な地域だけでなく (Asia/Nicosia)、リンクされた地域も指定できる
      const chrono::time_zone* linked_tz = tzdb.locate_zone("Europe/Nicosia");
      std::cout << linked_tz->name() << std::endl;
    }

### 出力

    Asia/Tokyo
    America/New_York
    Etc/UTC
    Etc/GMT
    Asia/Nicosia

## バージョン

### 言語

- C++20

### 処理系

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

## 参照

- tz database - Wikipedia
- Time Zone Database