Udostępnij za pośrednictwem


Klasa nonexistent_local_time

Ten wyjątek jest zgłaszany podczas próby przekonwertowania klasy local_time na nieistniejącą sys_time.

Składnia

class nonexistent_local_time : public runtime_error; // C++20

Uwagi

W okresie przejściowym od czasu standardowego do czasu letniego wiosną zegary zasadniczo tracą godzinę. Może to być mylące, ponieważ nie przejście do czasu letniego oznacza dodanie godziny? Przez "wiosnę do przodu" godzinę, godzina po przejściu zostanie skutecznie usunięta. Rozważ zmianę czasu letniego w Nowym Jorku, która ma miejsce w drugą niedzielę w marcu o 2 rano. O godzinie 2:00 zegar przechodzi do czasu letniego, a teraz odczytuje 3:00. local_time Jeśli przekonwertowana wartość to 2:30, na przykład czas ten występuje w okresie", który został "usunięty", a więc jest "nieistniejący".

W poniższym przykładzie pokazano błąd konwersji czasu nieistniejących. W tym przykładzie czas letni w Nowym Jorku rozpoczyna się o godzinie 2:00. Czas konwersji wynosi 2:30. To w ciągu godziny, która jest usuwana z powodu przejścia z czasu standardowego do czasu letniego. Dlatego zgłaszany nonexistent_local_time jest wyjątek.

Przykład: 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

Elementy członkowskie

Nazwa/nazwisko opis
Konstruktory Skonstruuj element nonexistent_local_time.
what Pobiera ciąg opisujący nieistniejący czas.

Wymagania

Nagłówek: <chrono> (od C++20)

Przestrzeń nazw: std::chrono

Opcja kompilatora: /std:c++latest

Konstruktor

Tworzy element nonexistent_local_time.

template<class Duration>
nonexistent_local_time(const local_time<Duration>& tp, const local_info& i);

Parametry

tp
Konwersja local_time, która nie powiodła się.

i
Informacje o próbie konwersji. Zobacz local_info , aby uzyskać szczegółowe informacje.

Uwagi

Zazwyczaj nie można utworzyć tego wyjątku. Jest on zgłaszany przez funkcje, które konwertują local_time sys_timeelement na .

what

Pobiera ciąg opisujący, dlaczego czas nie istnieje.

[[nodiscard]] virtual const char* what() const noexcept;

Wartość zwracana

Ciąg opisujący, dlaczego czas nie istnieje. Na przykład:

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

Zobacz też

<chrono>
to_sys
ambiguous_local_time
Odwołanie do plików nagłówka