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;
}
xxxxxxxxxx
#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 ❌