Sdílet prostřednictvím


Třída time_zone

A time_zone představuje časové pásmo pro konkrétní geografickou oblast. Obsahuje úplnou historii pravidel časového pásma pro každou oblast, takže převody času budou přesné, pokud převedete čas na datum zpět, když se pravidla liší pro časové pásmo, než jsou dnes.

Syntaxe

class time_zone;  // Since C++20

Poznámky

Knihovna <chrono> vytváří time_zone objekty jako součást inicializace databáze časového pásma. Poskytuje const přístup k vytvořeným objektům.

Objekt nelze sestavit nebo zkopírovat time_zone a použití výchozího konstruktoru přesunutí nebo výchozího operátoru přiřazení přesunutí způsobí nedefinované chování.

Takto získáte time_zone instanci:

const auto& timeZoneDatabase = get_tzdb(); // initialize the time zone database
const auto& currentZone = timeZoneDatabase.current_zone();

Microsoft C++ podporuje time_zone třídu počínaje sadou Visual Studio 2019 verze 16.10. Třída time_zone je funkce C++20. Je vyžadována možnost kompilátoru /std:c++latest .

Členové

Veřejné členské funkce a šablony funkcí

Název Popis
get_info sys_info Získá nebo local_info pro to time_zone.
name Získá název tohoto time_zone.
to_local Převede na sys_time v local_time tomto time_zonesouboru .
to_sys Převede na local_time v sys_time tomto time_zonesouboru .

Požadavky

Záhlaví: <chrono>

Data časového pásma jsou dostupná jenom pro Windows 10 verze 1903/19H1 a novější a Windows Server 2022 a novější.

Obor názvů: std::chrono

get_info

Šablona funkce get_info má dvě přetížení, která získají nebo sys_info local_info pro tuto time_zonefunkci .

template<class Duration>
sys_info get_info(const sys_time<Duration>& st) const;  // Since C++20
    
template<class Duration>
local_info get_info(const local_time<Duration>& lt) const;  // Since C++20

Parametry

Duration
Třída duration pro sys_time nebo local_time parametr.

st
Časový sys_time bod použitý k získání výsledku sys_info .

lt
Časový local_time bod použitý k získání výsledku local_info .

Vrácená hodnota

get_info V šabloně funkce, která trvá sys_time časový bod st, vrátí sys_info objekti, který st je v rozsahu [i.begin, i.end).

V šabloně get_info funkce, která trvá local_time časový bod lt, vrátí local_info objekt.

Poznámky

Microsoft C++ podporuje time_zone::get_info počínaje sadou Visual Studio 2019 verze 16.10. Funkce je funkce C++20, která vyžaduje možnost kompilátoru /std:c++latest .

name

Získá název tohoto time_zone.

string_view name() const noexcept;  // Since C++20

Vrácená hodnota

Vrátí název časového pásma jako string_view.

Poznámky

Microsoft C++ podporuje time_zone::name počínaje sadou Visual Studio 2019 verze 16.10.

to_local

Šablona funkce to_local převede na sys_time v local_time tomto time_zonesouboru .

template<class Duration>
local_time<common_type_t<Duration, seconds>>
to_local(const sys_time<Duration>& st) const;  // Since C++20

Parametry

Duration
Třída duration pro sys_time nebo local_time parametr.

st
Časový sys_time bod použitý k získání výsledku sys_info .

Vrácená hodnota

to_locallocal_time vrátí přidružené st k tomuto time_zone.

Poznámky

Microsoft C++ podporuje time_zone::to_local počínaje sadou Visual Studio 2019 verze 16.10. Funkce je funkce C++20, která vyžaduje možnost kompilátoru /std:c++latest .

Příklad: převod sys_time na local_time

// compile using: /std:c++latest
#include <iostream>
#include <chrono>

using namespace std::chrono;

int main()
{
    const auto& timeZoneDatabase = get_tzdb();
    const auto& currentZone = timeZoneDatabase.current_zone();
    local_time<system_clock::duration> lt = currentZone->to_local(system_clock::now());

    std::cout << "local_time: " << lt << "\n";
   
    return 0;
}
local_time: 2021-09-08 15:15:53.1830646

to_sys

Šablona funkce to_sys má dvě přetížení, která převedou local_time na v sys_time tomto time_zone.

template<class Duration>
sys_time<common_type_t<Duration, seconds>>
to_sys(const local_time<Duration>& lt) const;  // Since C++20

template<class Duration>
sys_time<common_type_t<Duration, seconds>>
to_sys(const local_time<Duration>& lt, choose z) const;  // Since C++20

Parametry

Duration
Třída duration parametru local_time .

lt
Časový local_time bod, který se má převést.

z
Hodnota nebo choose::latest.choose::earliest Slouží k řešení jiných nejednoznačných výsledků.

Vrácená hodnota

to_sys vrátí hodnotu sys_time , která je alespoň tak v pořádku jako seconds. Je to v pořádku, pokud má argument lt přesnost. sys_time Vrácená hodnota je ekvivalentem lt UTC podle pravidel tohoto time_zone.

Přetížení s jedním parametrem ambiguous_local_time vyvolá výjimku, pokud je převod z lt na nejednoznačný sys_time a nonexistent_local_time výjimka, pokud místní časový bod představuje neexistující místní časový bod. Nejednoznačnost může nastat během letního času na standardní přechod času. K dvěma instancím stejného místního časového bodu může dojít v jednom dni. Neexistující místní časový bod představuje časový bod přechodu ze standardního času na letní čas.

Přetížení se dvěma parametry v těchto případech nevyvolá výjimku. Pokud je převod z lt na a sys_time nejednoznačný, to_sys vrátí dřívější sys_time , pokud z je choose::earliest, a vrátí později sys_time , pokud z je choose::latest. lt Pokud představuje neexistující čas mezi dvěma časovými body UTC, pak jsou dva časové body UTC stejné, takže to_sys vrátí tento časový bod UTC.

Poznámky

Microsoft C++ podporuje time_zone::to_sys počínaje sadou Visual Studio 2019 verze 16.10. Funkce je funkce C++20, která vyžaduje možnost kompilátoru /std:c++latest .

Příklad: převod local_time na sys_time

// compile using: /std:c++latest
#include <iostream>
#include <chrono>

using namespace std::chrono;

int main()
{
    const auto& timeZoneDatabase = get_tzdb();
    const auto& currentZone = timeZoneDatabase.current_zone();

    auto st = currentZone->to_sys(local_days{2021y/September/15d}+16h+45min, choose::earliest);

    std::cout << "sys_time: " << st << "\n";
   
    return 0;
}
sys_time: 2021-09-15 23:45:00.0000000

Viz také

<chrono>
Referenční informace k souborům hlaviček