Enumerazione choose
Usato con time_zone
e zoned_time
per indicare come gestire una conversione ambigua o inesistente local_time
sys_time
.
Sintassi
enum class choose { // C++20
earliest,
latest
};
Membri
Elemento | Descrizione |
---|---|
earliest |
Se una conversione temporale è ambigua, usa il punto temporale precedente. |
latest |
Se una conversione temporale è ambigua, usa il punto temporale successivo. |
Osservazioni:
Se il risultato della conversione è , nonexistent_local_time
l'ora in earliest
e latest
sono uguali.
Errore di conversione ambiguo
Durante la transizione dall'ora legale all'ora solare in autunno, gli orologi ottengono essenzialmente un'ora in più. Questo può generare confusione perché la transizione all'ora solare significa perdere un'ora? Eseguendo il fallback di un'ora, l'ora prima della transizione verrà ripetuta dopo che l'orologio viene regolato per l'ora solare. Prendere in considerazione la modifica all'ora solare a New York, che si verifica la prima domenica a novembre alle 2:00. Prima di tutto, le 1:00 di mattina passano. Alle 2:00, l'orologio passa all'ora solare, quindi ora è di nuovo alle 1:00. Ciò significa che l'orario tra le 1:00 e le 2:00 sarà "ripetuto", aggiungendo in modo efficace un'ora.
Se un local_time
oggetto specifica un'ora durante l'ora "extra", non è chiaro come convertirla. L'ora convertita deve essere considerata come la "prima" volta che si verifica l'ora o il "secondo"? Se l'enumerazione choose
non viene specificata per indicare quale deve essere, si otterrà un'eccezione ambiguous_local_time
.
Errore di conversione inesistente
Quando si esegue la conversione dall'ora solare all'ora legale, può verificarsi un problema diverso. Durante la transizione dall'ora solare all'ora legale in primavera, gli orologi si spostano avanti un'ora. L'ora ignorata scompare, quindi, anche se sembra che sia stata aggiunta un'ora all'ora, "springing forward" un'ora, l'ora successiva alla transizione viene effettivamente rimossa.
Prendere in considerazione la modifica all'ora legale a New York, che si verifica la seconda domenica a marzo alle 2:00. Alle 2:00, l'orologio passa all'ora legale e ora legge le 3:00. Se l'oggetto local_time
convertito è 2:30am, ad esempio, l'ora è durante il periodo "rimosso" e così è "inesistente", causando un'eccezione nonexistent_local_time
.
Requisiti
Intestazione: <chrono>
(da C++20)
Spazio dei nomi: std::chrono
Opzione del compilatore:/std:c++latest
è obbligatoria.