Freigeben über


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