Поделиться через


choose перечисление

Используется и time_zone zoned_time указывает, как обрабатывать неоднозначные или несуществующие local_time преобразования sys_time .

Синтаксис

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

Участники

Элемент Description
earliest Если преобразование времени неоднозначно, использует более раннюю точку времени.
latest Если преобразование времени неоднозначно, используется более поздняя точка времени.

Замечания

Если результат преобразования является результатом nonexistent_local_time, время и earliest latest совпадают.

Неоднозначная ошибка преобразования

Во время перехода с летнего времени на стандартное время осенью часы по сути получают дополнительный час. Это может быть запутано, потому что не переход на стандартное время означает потерю часа? Попадая обратно в час, час до перехода будет повторяться после того, как часы корректируются на стандартное время. Рассмотрим изменение стандартного времени в Нью-йорке, которое происходит в первое воскресенье в ноябре в 2:00 утра. Во-первых, 1:00 утра идет. В 2 утра часы переходит в стандартное время, поэтому теперь это 1:00 утра снова. Это означает, что время между 1 утра и 2 утра будет "повторяться", эффективно добавляя час.

Если значение local_time указывает время в течение этого дополнительного часа, это не ясно, как преобразовать его. Следует ли рассматривать преобразованное время как "первое" время, которое происходит час, или "второй"? Если перечисление choose не указано, чтобы указать, какой он должен быть, вы получите ambiguous_local_time исключение.

Неисключаемая ошибка преобразования

При преобразовании из стандартного времени в летнее время может возникнуть другая проблема. Во время перехода с стандартного времени на летнее время весной часы перемещаются вперед час. Пропущенный час исчезает, так что, несмотря на то, что мы добавили час к времени, "спринг вперед" час, час после перехода фактически удаляется.

Рассмотрим изменение летнего времени в Нью-йорке, которое происходит во второй воскресенье в марте в 2 утра. В 2 утра часы переходит на летнее время и теперь считывает 3:00 утра. local_time Если преобразованное значение равно 2:30 утра, то это время в течение периода, который был удален и поэтому является "несуществующим", что приводит к nonexistent_local_time исключению.

Требования

Заголовок: <chrono> (с C++20)

Пространство имен: std::chrono

Параметр компилятора:/std:c++latest является обязательным.

См. также

to_sys
zoned_time конструктор