Sdílet prostřednictvím


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