Třída ambiguous_local_time
Tato výjimka je vyvolán při pokusu o převod na local_time
a sys_time
výsledek může být jednou z dvoukrát a ani choose::earliest
jeden nebo choose::latest
nebyl zadán k vyřešení nejednoznačnosti.
Syntaxe
class ambiguous_local_time : public runtime_error; // C++20
Poznámky
Během přechodu z letního času na standardní čas na podzim hodiny v podstatě získávají další hodinu. To může být matoucí, protože přechod na standardní čas neznamená ztrátu hodiny? Když se vrátíte za hodinu, hodina před přechodem se bude opakovat po nastavení hodin pro standardní čas. Vezměte v úvahu změnu standardního času v New Yorku, která probíhá v první neděli v listopadu v 2:00. První, 1:00 jde. V 2:00 se hodiny přejdou na standardní čas, takže teď je to znovu 1:00. To znamená, že doba mezi 1:00 a 2:00 se bude opakovat, což efektivně přidává hodinu.
local_time
Pokud určuje čas během této "extra" hodiny, není jasné, jak ho převést. Má se převedený čas považovat za první, kdy se tato hodina stane, nebo jako druhá? Pokud není zadaný výčt choose
, který označuje, který by měl být, zobrazí se ambiguous_local_time
výjimka.
Tento problém neexistuje při převodu ze standardního času na letní čas. V takovém případě může dojít k jinému problému. Podrobnosti najdete nonexistent_local_time
v tématu.
Následující příklad ukazuje nejednoznačný převod.
Příklad: 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
Členové
Název | Popis |
---|---|
Konstruktor | Vytvoření objektu ambiguous_local_time . |
what |
Získá řetězec, který popisuje povahu nejednoznačnosti. |
Požadavky
Hlavička: <chrono>
(od C++20)
Obor názvů: std::chrono
Možnost kompilátoru: /std:c++latest
Konstruktory
Vytvoří .ambiguous_local_time
template<class Duration>
ambiguous_local_time(const local_time<Duration>& tp, const local_info& i);
Parametry
tp
Ten local_time
se nedá převést.
i
Informace o pokusu o převod. Podrobnosti najdete local_info
v tématu.
Poznámky
Obvykle tuto výjimku nevytvoříte. Vyvolá se funkcemi, které převedou na local_time
.sys_time
what
Získá řetězec popisující podrobnosti nejednoznačnosti.
[[nodiscard]] virtual const char* what() const noexcept;
Vrácená hodnota
Řetězec popisující nejednoznačnost. Příklad:
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
Viz také
<chrono>
to_sys
nonexistent_local_time
Referenční informace k souborům hlaviček