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