nonexistent_local_time
クラス
この例外は、local_time
を存在しない sys_time
に変換しようとしたときにスローされます。
構文
class nonexistent_local_time : public runtime_error; // C++20
解説
春の標準時間から夏時間への移行中、時計は基本的に 1 時間を失います。 これは、夏時間への移行によって 1 時間増えるように思われるため、混乱を招く可能性があります。 "夏時間への切り替え" で 1 時間進めることで、移行後の 1 時間は実質的に削除されます。 ニューヨークで夏時間を変更することについて考えます。これは、3 月の第 2 日曜日に午前 2 時に行われます。 午前 2 時に、時計は夏時間に移行し、午前 3 時 00 分になります。 たとえば、変換される local_time
が午前 2 時 30 分の場合、その時間は "削除" された期間に含まれるので、"存在しない" 状態になります。
次の例は、存在しない時間変換エラーを示しています。 この例では、ニューヨークの夏時間の開始時刻は午前 2 時です。 変換される時刻は午前 2 時 30 分です。 これは、標準時間から夏時間への移行によって削除される時間内に発生します。 そのため、nonexistent_local_time
例外がスローされます。
例: nonexistent_local_time
#include <chrono>
#include <iostream>
using namespace std::chrono;
int main()
{
try
{
// The following will throw an exception because the local time being converted is during
// the hour that is "removed" when the clock advances an hour for daylight saving time.
auto zt = zoned_time{"America/New_York", local_days{Sunday[2]/March/2016} + 2h + 30min};
} catch (const nonexistent_local_time& e)
{
std::cout << e.what() << '\n';
}
return 0;
}
2016-03-13 02:30:00 is in a gap between
2016-03-13 02:00:00 EST and
2016-03-13 03:00:00 EDT which are both equivalent to
2016-03-13 07:00:00 UTC
メンバー
名前 | 説明 |
---|---|
コンストラクター | nonexistent_local_time を構築します。 |
what |
存在しない時刻を説明する文字列を取得します。 |
要件
Header: <chrono>
(C++20 以降)
名前空間: std::chrono
コンパイラ オプション: /std:c++latest
Constructor
nonexistent_local_time
を構築します。
template<class Duration>
nonexistent_local_time(const local_time<Duration>& tp, const local_info& i);
パラメーター
tp
変換に失敗した local_time。
i
試行された変換に関する情報。 詳細については、local_info
を参照してください。
解説
通常、この例外は作成されません。 これは、local_time
を sys_time
に変換する関数によってスローされます。
what
時刻が存在しない理由を説明する文字列を取得します。
[[nodiscard]] virtual const char* what() const noexcept;
戻り値
時刻が存在しない理由を説明する文字列。 次に例を示します。
2016-03-13 02:30:00 is in a gap between
2016-03-13 02:00:00 EST and
2016-03-13 03:00:00 EDT which are both equivalent to
2016-03-13 07:00:00 UTC