choose
enum
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.