Třída nonexistent_local_time
Tato výjimka je vyvolán při pokusu local_time
o převod na neexistující sys_time
.
Syntaxe
class nonexistent_local_time : public runtime_error; // C++20
Poznámky
Během přechodu ze standardního času na letní čas na jaře hodiny v podstatě ztratí hodinu. To může být matoucí, protože přechod na letní čas neznamená přidání hodiny? Tím, že se "posune dopředu" hodina následující po přechodu, se efektivně odebere. Vezměte v úvahu změnu letního času v New Yorku, která se děje v druhé neděli v březnu v 2:00. V 2:00 se hodiny přecházejí na letní čas a nyní čte 3:00. local_time
Pokud je převod 2:30,00, například tento čas je v období, které bylo "odebráno", a tak je "neexistující".
Následující příklad ukazuje neexistující chybu při převodu času. V tomto příkladu začíná letní čas v New Yorku v 2:00. Převedený čas je 2:30.00. To je během hodiny, která je odebrána kvůli přechodu ze standardního času na letní čas. nonexistent_local_time
Proto je vyvolán výjimka.
Příklad: 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
Členové
Název | Popis |
---|---|
Konstruktory | Vytvoření .nonexistent_local_time |
what |
Získá řetězec popisující neexistující čas. |
Požadavky
Hlavička: <chrono>
(od C++20)
Obor názvů: std::chrono
Možnost kompilátoru: /std:c++latest
Konstruktor
Vytvoří .nonexistent_local_time
template<class Duration>
nonexistent_local_time(const local_time<Duration>& tp, const local_info& i);
Parametry
tp
Local_time, která selhala převod.
i
Informace o pokusu o převod. Podrobnosti najdete local_info
v tématu.
Poznámky
Obvykle tuto výjimku nevytvoříte. Vyvolá se funkcemi, které převedou na local_time
.sys_time
what
Získá řetězec popisující, proč čas neexistuje.
[[nodiscard]] virtual const char* what() const noexcept;
Vrácená hodnota
Řetězec popisující, proč čas neexistuje. Příklad:
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
Viz také
<chrono>
to_sys
ambiguous_local_time
Referenční informace k souborům hlaviček