Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Klasa
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_timeelement 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