Condividi tramite


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_timel'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.

Vedi anche

to_sys
zoned_time costruttore