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.