Compartilhar via


Classe nonexistent_local_time

Essa exceção é gerada ao tentar converter um local_time em um sys_time inexistente.

Sintaxe

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

Comentários

Durante a transição do horário padrão para o horário de verão na primavera, os relógios essencialmente perdem uma hora. Isso pode ser confuso porque a transição para o horário de verão não significa adicionar uma hora? Ao "avançar" uma hora, a hora seguinte à transição é efetivamente removida. Considere a mudança para o horário de verão em Nova York, que acontece no segundo domingo de março às 2h. Às 2h, o relógio faz a transição para o horário de verão e agora lê 3h. Se a local_time que está sendo convertida for 2h30, por exemplo, esse tempo será durante o período que foi "removido" e, portanto, é "inexistente".

O exemplo a seguir demonstra um erro de conversão de tempo inexistente. Neste exemplo, o horário de verão em Nova York começa às 2h. A hora que está sendo convertida é 2h30. Isso ocorre durante a hora que é removida devido à transição do horário padrão para o horário de verão. Então, uma exceção nonexistent_local_time é lançada.

Exemplo: 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

Membros

Nome Descrição
Construtores Construa um nonexistent_local_time.
what Obtém uma cadeia de caracteres que descreve o tempo inexistente.

Requisitos

Cabeçalho: <chrono> (desde C++20)

Namespace: std::chrono

Opção do compilador: /std:c++latest

Construtor

Constrói um nonexistent_local_time.

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

Parâmetros

tp
O local_time que falhou na conversão.

i
Informações sobre a tentativa de conversão. Confira local_info para obter detalhes.

Comentários

Normalmente, você não criará essa exceção. Ela é gerada por funções que convertem um local_time em um sys_time.

what

Obtém uma cadeia de caracteres que descreve por que o tempo é inexistente.

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

Valor retornado

Uma cadeia de caracteres que descreve por que o tempo é inexistente. Por exemplo:

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

Confira também

<chrono>
to_sys
ambiguous_local_time
Referência de Arquivos de Cabeçalho