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

履歴 編集

function
<chrono>

std::chrono::get_tzdb(C++20)

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()で取得されるタイムゾーンデータベースを更新する
}

戻り値

#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時点で実装なし)