Condividi tramite


Classe ambiguous_local_time

Questa eccezione viene generata quando si tenta di convertire un oggetto local_time in e sys_time il risultato può essere uno di due volte e nessuno choose::earliest choose::latest o è stato specificato per risolvere l'ambiguità.

Sintassi

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

Osservazioni:

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 .

Questo problema non esiste quando si esegue la conversione dall'ora solare all'ora legale. In tal caso, può verificarsi un problema diverso. Per informazioni dettagliate, vedere nonexistent_local_time.

L'esempio seguente mostra una conversione ambigua.

Esempio: ambiguous_local_time

#include <chrono>
#include <iostream>

using namespace std::chrono;
    
int main()
{
    try
    {
        // The following will throw an exception because converting 1:30am local time to system time could be interpreted as either 
        // 1:30 AM EDT or 1:30 AM EST. Which to choose isn't specified for the conversion, so an ambiguous_local_time
        // exception is thrown.
        auto zt = zoned_time{"America/New_York", local_days{Sunday[1]/November/2016} + 1h + 30min};
    } catch (const ambiguous_local_time& e)
    {
        std::cout << e.what() << '\n';
    }
    return 0;
}
2016-11-06 01:30:00 is ambiguous. It could be
2016-11-06 01:30:00 EDT == 2016-11-06 05:30:00 UTC or
2016-11-06 01:30:00 EST == 2016-11-06 06:30:00 UTC

Membri

Nome Descrizione
Costruttore Costruire un oggetto ambiguous_local_time.
what Ottiene una stringa che descrive la natura dell'ambiguità.

Requisiti

Intestazione: <chrono> (da C++20)

Spazio dei nomi: std::chrono

Opzione del compilatore: /std:c++latest

Costruttori

Costruisce un oggetto ambiguous_local_time.

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

Parametri

tp
Oggetto local_time che non è stato possibile convertire.

i
Informazioni sulla conversione tentata. Per informazioni dettagliate, vedere local_info.

Osservazioni:

In genere non verrà creata questa eccezione. Viene generata da funzioni che converte un oggetto local_time in un oggetto sys_time.

what

Ottiene una stringa che descrive i dettagli dell'ambiguità.

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

Valore restituito

Stringa che descrive l'ambiguità. Ad esempio:

2016-11-06 01:30:00 is ambiguous. It could be
2016-11-06 01:30:00 EDT == 2016-11-06 05:30:00 UTC or
2016-11-06 01:30:00 EST == 2016-11-06 06:30:00 UTC

Vedi anche

<chrono>
to_sys
nonexistent_local_time
Riferimento file di intestazione