ambiguous_local_time
-Klasse
Diese Ausnahme wird ausgelöst, wenn Sie versuchen, eine local_time
In ein sys_time
und das Ergebnis kann eins von zwei Mal sein, und weder choose::latest
choose::earliest
noch wurde angegeben, um die Mehrdeutigkeit zu begleichen.
Syntax
class ambiguous_local_time : public runtime_error; // C++20
Hinweise
Während des Übergangs von Sommerzeit zu Standardzeit im Herbst gewinnen Uhren im Wesentlichen eine zusätzliche Stunde. Dies kann verwirrend sein, weil der Übergang zur Standardzeit nicht bedeutet, dass eine Stunde verloren geht? Wenn Sie eine Stunde zurückfallen, wird die Stunde vor dem Übergang wiederholt, nachdem die Uhr für die Standardzeit angepasst wurde. Berücksichtigen Sie die Änderung der Standardzeit in New York, die am ersten Sonntag im November um 2:00 Uhr geschieht. Zuerst geht es um 1:00 Uhr. Um 2:00 Uhr wechselt die Uhr zur Standardzeit, so dass es jetzt wieder 1:00 Uhr ist. Das bedeutet, dass die Zeit zwischen 1 uhr und 2 Uhr "wiederholt" wird und effektiv eine Stunde hinzugefügt wird.
Wenn eine local_time
Zeit während dieser "zusätzlichen" Stunde angegeben wird, ist es nicht klar, wie sie konvertiert werden kann. Sollte die konvertierte Zeit als "erstes" Mal behandelt werden, wenn diese Stunde stattfindet, oder die "zweite"? Wenn die Enumeration choose
nicht angegeben ist, um anzugeben, welche Angabe sie sein soll, erhalten Sie eine ambiguous_local_time
Ausnahme.
Dieses Problem ist beim Konvertieren von Standardzeit in Sommerzeit nicht vorhanden. In diesem Fall kann ein anderes Problem auftreten. Einzelheiten dazu finden Sie unter nonexistent_local_time
.
Das folgende Beispiel zeigt eine mehrdeutige Konvertierung.
Beispiel: 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
Mitglieder
Name | Beschreibung |
---|---|
Konstruktor | Erstellen eines ambiguous_local_time . |
what |
Ruft eine Zeichenfolge ab, die die Art der Mehrdeutigkeit beschreibt. |
Anforderungen
Header: <chrono>
(seit C++20)
Namespace:std::chrono
Compileroption: /std:c++latest
Konstruktoren
Erstellt ein Objekt vom Typ ambiguous_local_time
.
template<class Duration>
ambiguous_local_time(const local_time<Duration>& tp, const local_info& i);
Parameter
tp
Das local_time
konnte nicht konvertiert werden.
i
Informationen zur versuchten Konvertierung. Einzelheiten dazu finden Sie unter local_info
.
Hinweise
Normalerweise erstellen Sie diese Ausnahme nicht. Es wird von Funktionen ausgelöst, die eine local_time
in ein sys_time
.
what
Ruft eine Zeichenfolge ab, die die Details der Mehrdeutigkeit beschreibt.
[[nodiscard]] virtual const char* what() const noexcept;
Rückgabewert
Eine Zeichenfolge, die die Mehrdeutigkeit beschreibt. Zum Beispiel:
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
Siehe auch
<chrono>
to_sys
nonexistent_local_time
Headerdateienreferenz