choose
列挙型
あいまいな変換または存在しない local_time
の sys_time
への変換の処理方法を示すために、time_zone
と zoned_time
と共に使用します。
構文
enum class choose { // C++20
earliest,
latest
};
メンバー
要素 | 説明 |
---|---|
earliest |
時間変換があいまいである場合、以前の時点を使用します。 |
latest |
時間変換があいまいである場合、後の時点を使用します。 |
解説
変換の結果が nonexistent_local_time
である場合、earliest
と latest
の時刻は同じです。
あいまいな変換エラー
秋の夏時間から標準時への移行中に、時計は基本的に 1 時間余分に進みます。 これは、標準時への移行によって 1 時間が失われるように思われるため、混乱を招く可能性があります。 1 時間戻すことにより、移行前の時間は、時計が標準時に調整された後に繰り返されます。 ニューヨークでの標準時への変更について考えてみましょう。これは 11 月の最初の日曜日の午前 2 時に発生します。 まず、午前 1 時が過ぎます。 午前 2 時に時計は標準時に移行するため、もう一度午前 1 時になります。 つまり、午前 1 時から午前 2 時までの時間は繰り返され、事実上 1 時間が加算されます。
local_time
がこの "追加分の" 1 時間の時間を指定した場合、変換方法は明確ではありません。 変換された時刻を、1 回目に発生した "最初の" 時間または "2 回目" の時間のどちらとして扱う必要があるでしょうか。 どちらにすべきかを指定する列挙型 choose
が指定されていない場合は、ambiguous_local_time
例外が発生します。
存在しない変換エラー
標準時から夏時間への変換時には、別の問題が発生する可能性があります。 春の標準時間から夏時間への移行時に、時計は 1 時間先に移動します。 スキップされた時間は消えているので、春に時間を 1 時間進めることで 1 時間を追加した場合でも、移行の後の時間は実質的に削除されます。
ニューヨークで夏時間を変更することについて考えます。これは、3 月の第 2 日曜日に午前 2 時に行われます。 午前 2 時に、時計は夏時間に移行し、午前 3 時 00 分になります。 たとえば、変換される local_time
が午前 2 時 30 分の場合、その時間は "削除" された期間に含まれるので、"存在しない" 状態になり、nonexistent_local_time
の例外の結果になります。
要件
Header: <chrono>
(C++20 以降)
名前空間: std::chrono
/std:c++latest
コンパイラ オプションが必要です。