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


Класс nonexistent_local_time

Это исключение возникает при попытке преобразовать его local_time в несуществующее sys_time.

Синтаксис

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

Замечания

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

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

Пример: 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

Участники

Имя Описание
Конструкторы Создайте nonexistent_local_time
what Возвращает строку, описывающую несуществующее время.

Требования

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

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

Параметр компилятора: /std:c++latest

Конструктор

Создает документ nonexistent_local_time.

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

Параметры

tp
Local_time, сбой преобразования.

i
Сведения о попытке преобразования. Подробные сведения см. в разделе local_info.

Замечания

Обычно это исключение не будет создано. Он создается функциями, которые преобразуют его local_time sys_timeв .

what

Возвращает строку, описывающую, почему время не существует.

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

Возвращаемое значение

Строка, описывающая, почему время не существует. Например:

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

См. также

<chrono>
to_sys
ambiguous_local_time
Справочник по файлам заголовков