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

履歴 編集

enum
<chrono>

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

namespace std::chrono {
  enum class choose {
    earliest,
    latest
  };
}

概要

chooseは、タイムゾーン情報に従ってローカル時間からシステム時間に変換する際にあいまいになる場合、早い時間と遅い時間どちら側の候補に変換するかをユーザーが選択できるようにするための列挙型である。

各列挙値は、以下を意味する:

列挙値 説明
earliest 早い時間側に変化する
latest 遅い時間側に変換する

この列挙型は、サマータイムを採用しているタイムゾーンにおいて、重複するローカル時間があるため対応するシステム時間が一意に決まらない場合に、複数候補のどれに変換するかを決めるためのものである。

#include <chrono>
#include <iostream>

namespace chrono = std::chrono;
using namespace std::chrono_literals;

int main()
{
  // ニューヨーク (EDTタイムゾーン) のローカル時間を、システム時間 (UTCタイムゾーン) に変換する。
  // ローカル時間2016-11-06 01:30:00 EDTに対応するシステム時間は、以下の2つがあり、一意に決まらない:
  //   2016-11-06 05:30:00 UTC
  //   2016-11-06 06:30:00 UTC
  // ここではlatestを指定することで、遅い時間 (06:30:00) を選択する
  chrono::local_time local_now = chrono::local_days{2016y/11/6} + 1h + 30min;

  chrono::zoned_time zt{"America/New_York", local_now, choose::latest};
  chrono::sys_time st = zt.get_sys_time();

  std::cout << st << std::endl;
}

出力

2016-11-06 06:30:00 UTC

バージョン

言語

  • C++20

処理系

  • Clang: (9.0時点で実装なし)
  • GCC: (9.2時点で実装なし)
  • Visual C++: (2019 Update 3時点で実装なし)

関連項目