Share via


choose 列挙型

あいまいな変換または存在しない local_timesys_time への変換の処理方法を示すために、time_zonezoned_time と共に使用します。

構文

enum class choose { // C++20
    earliest,
    latest
};

メンバー

要素 説明
earliest 時間変換があいまいである場合、以前の時点を使用します。
latest 時間変換があいまいである場合、後の時点を使用します。

解説

変換の結果が nonexistent_local_time である場合、earliestlatest の時刻は同じです。

あいまいな変換エラー

秋の夏時間から標準時への移行中に、時計は基本的に 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 の例外の結果になります。

必要条件

ヘッダー:<chrono> (C++20 以降)

名前空間std::chrono:

/std:c++latest コンパイラ オプションが必要です。

関連項目

to_sys
zoned_time コンストラクター