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

履歴 編集

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_nametrueであるtzへのポインタを返す。
  • そのようなオブジェクトが見つからない場合、タイムゾーンリンクの要素であるtime_zone_link型オブジェクトlinkに対してlink.name() == tz_nametrueである要素に対して、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時点で実装なし)

参照