Udostępnij za pośrednictwem


choose wyliczenie

Używane z elementami time_zone i zoned_time do wskazywania sposobu obsługi niejednoznacznych lub nieistniejących local_time sys_time konwersji.

Składnia

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

Elementy członkowskie

Element opis
earliest Jeśli konwersja czasu jest niejednoznaczna, używa wcześniejszego punktu czasu.
latest Jeśli konwersja czasu jest niejednoznaczna, użyj późniejszego punktu czasu.

Uwagi

Jeśli wynikiem konwersji jest nonexistent_local_time, czas w earliest i latest są takie same.

Niejednoznaczny błąd konwersji

Podczas przejścia od czasu letniego do czasu standardowego jesienią zegary zasadniczo zyskują dodatkową godzinę. Może to być mylące, ponieważ nie przejście do czasu standardowego oznacza utratę godziny? Spadając co godzinę, godzina przed przejściem będzie powtarzana po zegarze dostosowuje się do standardowego czasu. Rozważ zmianę czasu standardowego w Nowym Jorku, która ma miejsce w pierwszą niedzielę w listopadzie o godzinie 2:00. Po pierwsze, 1:00 idzie dalej. O 2 rano zegar przechodzi do czasu standardowego, więc teraz znowu jest 1:00. Oznacza to, że czas między 1 rano a 2 rano będzie "powtarzany", skutecznie dodając godzinę.

Jeśli parametr local_time określa czas w tej "dodatkowej" godzinie, nie jest jasne, jak go przekonwertować. Czy przekonwertowany czas powinien być traktowany jako "pierwszy" czas, który się dzieje, czy "drugi"? Jeśli wyliczenie choose nie jest określone, aby wskazać, które powinno być, otrzymasz ambiguous_local_time wyjątek.

Błąd konwersji nieistniejących

Podczas konwertowania z czasu standardowego na czas letni może wystąpić inny problem. Podczas przejścia od czasu standardowego do czasu letniego wiosną zegary przesuwają się o godzinę. Pominięta godzina znika, więc mimo że wydaje się, że dodaliśmy godzinę do 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 "usuniętym", a więc jest "nieistniejący", co powoduje nonexistent_local_time wyjątek.

Wymagania

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

Przestrzeń nazw: std::chrono

Opcja kompilatora:/std:c++latest jest wymagana.

Zobacz też

to_sys
zoned_time konstruktor