namespace std::chrono {
const tzdb& get_tzdb();
}
概要
タイムゾーンデータベースを取得する。
この関数は、保持しているタイムゾーンデータベースのリストのうち、最新のタイムゾーンデータベースを取得する。タイムゾーンリストはシングルトンオブジェクトになっており、それにアクセスすることでタイムゾーンデータベースが自動的に読み込まれ、タイムゾーンデータベースのオブジェクトが構築される。
std::chrono::reload_tzdb()
関数を呼び出すことでtzdb_list
がスレッドセーフに更新され、最新のタイムゾーンデータベースが先頭要素として挿入され、古いタイムゾーンデータベースがうしろにずれるようになっている。
IANAのタイムゾーンデータベースは、毎月もしくは季節ごとに更新される。長期間動かすプログラムの場合は、タイムゾーンデータベースが更新されることを想定する必要がある。std::chrono::remote_version()
関数を呼び出すことでダウンロード先にあるタイムゾーンデータベースの最新バージョンがいくつなのかを取得できる。それとローカルのバージョンを比較してタイムゾーンデータベースを更新することになる。
// 10日に一度などの周期で以下の処理を実行する
if (get_tzdb().version != remote_version()) {
reload_tzdb(); // get_tzdb()で取得されるタイムゾーンデータベースを更新する
}
戻り値
return get_tzdb_list().front();
例
#include <iostream>
#include <chrono>
namespace chrono = std::chrono;
int main()
{
const chrono::tzdb& tzdb = chrono::get_tzdb();
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 ❌