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

履歴 編集

function
<chrono>

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

namespace std::chrono {
  const tzdb& reload_tzdb();
}

概要

リモートタイムゾーンデータベースを再読込する。

この関数は、IANAのタイムゾーンデータベースをダウンロードし、get_tzdb()関数で取得できるローカルのタイムゾーンデータベースを、スレッドセーフに最新バージョンへと更新する。

IANAのタイムゾーンデータベースは、毎月もしくは季節ごとに更新される。長期間動かすプログラムの場合は、タイムゾーンデータベースが更新されることを想定する必要がある。std::chrono::remote_version()関数を呼び出すことでダウンロード先にあるタイムゾーンデータベースの最新バージョンがいくつなのかを取得できる。それとローカルのバージョンを比較してタイムゾーンデータベースを更新することになる。

// 10日に一度などの周期で以下の処理を実行する
if (get_tzdb().version != remote_version()) {
  reload_tzdb(); // get_tzdb()で取得されるタイムゾーンデータベースを更新する
}

効果

  • リモートタイムゾーンデータベースのバージョンを確認する。ローカルで保持しているタイムゾーンデータベースとバージョンが同じである場合、なにもしない
  • そうでない場合、リモートタイムゾーンデータベースをダウンロードし、get_tzdb_list()関数で取得できるタイムゾーンデータベースリストの先頭要素の前に、リモートタイムゾーンデータベースを挿入する

戻り値

return get_tzdb_list().front();

例外

なんからの理由で有効なタイムゾーンデータベースを参照できない場合、この関数はruntime_error例外を送出する。

備考

#include <iostream>
#include <chrono>

namespace chrono = std::chrono;

int main()
{
  // ローカルのタイムゾーンデータベースが古かったら更新する
  if (chrono::get_tzdb().version != chrono::remote_version()) {
    chrono::reload_tzdb();
  }
  std::cout << chrono::get_tzdb().version << std::endl;
}

出力例

2019c

バージョン

言語

  • C++20

処理系