Compartilhar via


chooseenum

Usado com time_zone e zoned_time para indicar como lidar com uma conversão ambígua ou inexistente de local_time para sys_time.

Sintaxe

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

Membros

Element Descrição
earliest Se uma conversão de tempo for ambígua, ela usará o ponto de tempo anterior.
latest Se uma conversão de tempo for ambígua, ela usará o ponto de tempo posterior.

Comentários

Se o resultado da conversão for um nonexistent_local_time, o tempo em earliest e latest será o mesmo.

Erro de conversão ambígua

Durante a transição do horário de verão para o horário padrão no outono, os relógios essencialmente ganham uma hora extra. Pode ser confuso, pois a transição para o horário normal não significa perder uma hora? Ao voltar uma hora, o horário antes da transição será repetido depois que o relógio se ajustar para o horário normal. Pense na mudança no horário normal em Nova York, que acontece no primeiro domingo de novembro às 2h da manhã. Primeiro, passa 1h da manhã. Às 2h, o relógio faz a transição para o horário normal, então agora são 1h da manhã novamente. Isso significa que o horário entre 1h e 2h será "repetido", adicionando efetivamente uma hora.

Se um local_time especificar um horário durante essa hora "extra", não fica claro como convertê-lo. O horário convertido deve ser tratado como a "primeira" vez que ocorre essa hora ou a "segunda"? Se a enumeração choose não for especificada para indicar qual deve ser, você receberá uma exceção ambiguous_local_time.

Erro de conversão inexistente

Ao converter do horário padrão para o horário de verão, um problema diferente poderá surgir. 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. A hora ignorada desaparece, então, embora pareça que adicionamos uma hora à hora, "avançando" 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 local_time estiver sendo convertido às 2h30, por exemplo, esse tempo será durante o período que foi "removido" e, portanto, é "inexistente", resultando em uma exceção nonexistent_local_time.

Requisitos

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

Namespace: std::chrono

A opção do compilador /std:c++latest é necessária.

Confira também

to_sys
zoned_time constructor