最終更新日時: 2025年07月12日 02時16分44秒 (JST)
Koichi Murase が更新

履歴 編集

class
<chrono>

# std::chrono::tzdb_list(C++20)

    namespace std::chrono {
      class tzdb_list;
    }

## 概要

`tzdb_list`は、タイムゾーンデータベースのリストであり、要素として読み取り専用のタイムゾーンデータベース`tzdb`のオブジェクトをもつ。

このクラスのオブジェクトは、`get_tzdb_list()`関数を使用することでシングルトンとして参照できる。

このクラスのオブジェクトは、長期間動かすプログラムにおいて、プログラム実行中にタイムゾーンデータベースが更新されるような状況のためにある。IANAのタイムゾーンデータベースは、毎月もしくは季節ごとに更新される。`reload_tzdb()`関数を呼び出すことで、このクラスのオブジェクトの先頭要素として最新のタイムゾーンデータベースが挿入され、古いタイムゾーンデータベースは後方に移動するようになっている。

`get_tzdb()`関数、`locate_zone()`関数、`current_zone()`では、このクラスの先頭要素である最新のタイムゾーンデータベースを参照するが、更新前の古いタイムゾーンデータベースを参照したい場合には、このクラスがもつイテレータを介することでそのようなタイムゾーンデータベースにアクセスできる。

## 備考

- このリストが最大および少なくとも何要素を保持できるかは未規定
- `reload_tzdb()`関数によって、新しいバージョンがあったらこのリストに要素が追加されるが、リストに要素を追加するためのメンバ関数は未規定

## メンバ関数

### 構築／コピー／破棄

名前 | 説明 | 対応バージョン
--- | --- | ---
`tzdb_list() = delete;` `tzdb_list(const tzdb_list&) = delete;` `tzdb_list(tzdb_list&&) = delete;` その他未規定の追加コンストラクタがある | コンストラクタ | C++20
`tzdb_list& operator=(const tzdb_list&) = delete;` `tzdb_list& operator=(tzdb_list&&) = delete;` | 代入演算子 | C++20

### 要素アクセス

名前 | 説明 | 対応バージョン
--- | --- | ---
`front` | 先頭要素を取得する | C++20

### リストの変更

名前 | 説明 | 対応バージョン
--- | --- | ---
`erase_after` | 指定したイテレータの次の要素を削除する | C++20

### イテレータ

名前 | 説明 | 対応バージョン
--- | --- | ---
`begin` | 先頭要素を指すイテレータを取得する | C++20
`end` | 末尾の次を指すイテレータを取得する | C++20
`cbegin` | 先頭要素を指す読み取り専用イテレータを取得する | C++20
`cend` | 末尾の次を指す読み取り専用イテレータを取得する | C++20

## メンバ型

名前 | 説明 | 対応バージョン
--- | --- | ---
`const_iterator` | ForwardIterator要件を満たすイテレータ型 | C++20

## 例

    #include <iostream>
    #include <chrono>

    namespace chrono = std::chrono;

    int main()
    {
      const chrono::tzdb& tzdb = chrono::get_tzdb_list().front();
      const chrono::time_zone* tz = tzdb.locate_zone("Asia/Tokyo");
      std::cout << tz->name() << std::endl;
    }

### 出力例

    Asia/Tokyo

## バージョン

### 言語

- C++20

### 処理系

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