Klasa ambiguous_local_time
Ten wyjątek jest zgłaszany podczas próby przekonwertowania local_time
elementu na wartość sys_time
, a wynik może być jeden z dwóch razy i nie określono ani choose::earliest
choose::latest
nie został określony w celu uregulowania niejednoznaczności.
Składnia
class ambiguous_local_time : public runtime_error; // C++20
Uwagi
Podczas przejścia od czasu letniego do czasu standardowego jesienią zegary zasadniczo zyskują dodatkową godzinę. Może to być mylące, ponieważ nie przejście do czasu standardowego oznacza utratę godziny? Spadając co godzinę, godzina przed przejściem będzie powtarzana po zegarze dostosowuje się do standardowego czasu. Rozważ zmianę czasu standardowego w Nowym Jorku, która ma miejsce w pierwszą niedzielę w listopadzie o godzinie 2:00. Po pierwsze, 1:00 idzie dalej. O 2 rano zegar przechodzi do czasu standardowego, więc teraz znowu jest 1:00. Oznacza to, że czas między 1 rano a 2 rano będzie "powtarzany", skutecznie dodając godzinę.
Jeśli parametr local_time
określa czas w tej "dodatkowej" godzinie, nie jest jasne, jak go przekonwertować. Czy przekonwertowany czas powinien być traktowany jako "pierwszy" czas, który się dzieje, czy "drugi"? Jeśli wyliczenie choose
nie jest określone, aby wskazać, które powinno być, otrzymasz ambiguous_local_time
wyjątek.
Ten problem nie istnieje podczas konwertowania z czasu standardowego na czas letni. W takim przypadku może wystąpić inny problem. Zobacz nonexistent_local_time
, aby uzyskać szczegółowe informacje.
W poniższym przykładzie przedstawiono niejednoznaczną konwersję.
Przykład: 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
Elementy członkowskie
Nazwa/nazwisko | opis |
---|---|
Konstruktor | Skonstruuj element ambiguous_local_time . |
what |
Pobiera ciąg opisujący charakter niejednoznaczności. |
Wymagania
Nagłówek: <chrono>
(od C++20)
Przestrzeń nazw: std::chrono
Opcja kompilatora: /std:c++latest
Konstruktory
Tworzy element ambiguous_local_time
.
template<class Duration>
ambiguous_local_time(const local_time<Duration>& tp, const local_info& i);
Parametry
tp
Nie można przekonwertować elementu local_time
.
i
Informacje o próbie konwersji. Zobacz local_info
, aby uzyskać szczegółowe informacje.
Uwagi
Zazwyczaj nie można utworzyć tego wyjątku. Jest on zgłaszany przez funkcje, które konwertują local_time
sys_time
element na .
what
Pobiera ciąg opisujący szczegóły niejednoznaczności.
[[nodiscard]] virtual const char* what() const noexcept;
Wartość zwracana
Ciąg opisujący niejednoznaczność. Na przykład:
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
Zobacz też
<chrono>
to_sys
nonexistent_local_time
Odwołanie do plików nagłówka