Partager via


Classe time_zone

Représente time_zone le fuseau horaire d’une zone géographique spécifique. Il a l’historique complet des règles de fuseau horaire pour chaque zone afin que les conversions d’heure soient précises si vous convertissez une heure pour une date de retour lorsque les règles sont différentes pour le fuseau horaire qu’elles sont aujourd’hui.

Syntaxe

class time_zone;  // Since C++20

Notes

La <chrono> bibliothèque crée des time_zone objets dans le cadre de son initialisation de base de données de fuseau horaire. Il fournit const l’accès aux objets créés.

Vous ne pouvez pas construire ou copier un time_zone objet, et l’utilisation du constructeur de déplacement par défaut ou de l’opérateur d’affectation de déplacement par défaut entraîne un comportement non défini.

Voici comment obtenir une time_zone instance :

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

Microsoft C++ prend en charge la time_zone classe à partir de Visual Studio 2019 version 16.10. La time_zone classe est une fonctionnalité C++20. L'option de compilation /std:c++latest est requise.

Membres

Fonctions et modèles de fonction membres publics

Nom Description
get_info Obtient une sys_info ou local_info pour cela time_zone.
name Obtient le nom de cet objet time_zone.
to_local Convertit un sys_time en un local_time dans ce time_zone.
to_sys Convertit un local_time en un sys_time dans ce time_zone.

Spécifications

En-tête : <chrono>

Les données de fuseau horaire sont disponibles uniquement pour Windows 10 version 1903/19H1 et ultérieures, et Windows Server 2022 et versions ultérieures.

Espace de noms : std::chrono

get_info

Le modèle get_info de fonction a deux surcharges qui obtiennent un sys_info ou local_info pour cela time_zone.

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

Paramètres

Duration
Classe duration pour le ou local_time le sys_time paramètre.

st
Point sys_time de temps utilisé pour obtenir un sys_info résultat.

lt
Point local_time de temps utilisé pour obtenir un local_info résultat.

Valeur retournée

Dans le get_info modèle de fonction qui prend un sys_time point stde temps, il retourne un sys_info objet i tel qu’il st se trouve dans la plage [i.begin, i.end).

Dans le get_info modèle de fonction qui prend un local_time point ltde temps, il retourne un local_info objet.

Notes

Microsoft C++ prend en charge time_zone::get_info le démarrage de Visual Studio 2019 version 16.10. La fonction est une fonctionnalité C++20 qui nécessite l’option du /std:c++latest compilateur.

name

Obtient le nom de cet objet time_zone.

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

Valeur retournée

Retourne le nom du fuseau horaire en tant que string_view.

Notes

Microsoft C++ prend en charge time_zone::name le démarrage de Visual Studio 2019 version 16.10.

to_local

Le modèle to_local de fonction convertit un sys_time en un local_time dans ce time_zone.

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

Paramètres

Duration
Classe duration pour le ou local_time le sys_time paramètre.

st
Point sys_time de temps utilisé pour obtenir un sys_info résultat.

Valeur retournée

to_local retourne l’associé local_time dans st ce time_zonefichier .

Notes

Microsoft C++ prend en charge time_zone::to_local le démarrage de Visual Studio 2019 version 16.10. La fonction est une fonctionnalité C++20 qui nécessite l’option du /std:c++latest compilateur.

Exemple : convertir sys_time en 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

Le modèle to_sys de fonction a deux surcharges qui convertissent un local_time en un sys_time dans ce 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

Paramètres

Duration
Classe duration du local_time paramètre.

lt
Point local_time de temps à convertir.

z
Valeur de choose::earliest ou choose::latest. Il est utilisé pour résoudre les résultats ambigus.

Valeur retournée

to_sys retourne une sys_time valeur qui est au moins aussi fine que seconds. Il est plus fin si l’argument lt a une précision plus fine. Le retour sys_time est l’équivalent UTC selon lt les règles de cette time_zone.

La surcharge un paramètre lève une ambiguous_local_time exception si la conversion vers lt un sys_time est ambiguë et une nonexistent_local_time exception si le point de temps local représente un point de temps local inexistant. L’ambiguïté peut se produire pendant une période d’été à la transition de temps standard. Deux instances du même point de temps local peuvent se produire dans un jour. Un point de temps local inexistant représente un point de temps dans la transition de l’heure standard à l’heure d’été.

La surcharge à deux paramètres ne lève pas d’exception dans ces cas. Si la conversion d’une valeur est ambiguë, to_sys retourne la valeur antérieure sys_time si z c’est choose::earliest, et retourne la version ultérieure sys_time si c’est choose::latestz .lt sys_time Si la lt valeur représente une heure inexistante entre deux points d’heure UTC, les deux points de temps UTC sont identiques, donc to_sys retourne ce point de temps UTC.

Notes

Microsoft C++ prend en charge time_zone::to_sys le démarrage de Visual Studio 2019 version 16.10. La fonction est une fonctionnalité C++20 qui nécessite l’option du /std:c++latest compilateur.

Exemple : convertir local_time en 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

Voir aussi

<chrono>
Informations de référence sur les fichiers d’en-tête