Sdílet prostřednictvím


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