Partager via


struct zoned_traits

Vous permet d’associer un autre fuseau horaire par défaut à un zoned_time, et éventuellement mapper un nom personnalisé à un fuseau horaire.

Syntaxe

1)
template<class T>
struct zoned_traits {}; // C++20

2)
template <>
struct zoned_traits<const time_zone*>; // C++20

Paramètres

1) T : pointeur vers un type qui fournit un élément personnalisé time_zone.
2) Lorsque vous ne fournissez pas l’argument time_zone* de modèle, cette spécialisation fournit const std::chrono::time_zone*par défaut le fuseau horaire UTC.

Notes

Le pointeur vers le type que vous fournissez n’a pas besoin de fournir les fonctions statiques default_zone() ou locate_zone(). Mais si ce n’est pas le cas, les zoned_time constructeurs ne seront pas pris en compte pendant la résolution de surcharge.

Membres

Nom Description
default_zone Obtient le time_zone pointeur du fuseau horaire par défaut.
locate_zone Obtient le time_zone pointeur du fuseau horaire spécifié.

Spécifications

En-tête : <chrono>

Espace de noms : std::chrono

Option du compilateur : /std:c++latest

Microsoft C++ prend en charge zoned_traits la classe à partir de Visual Studio 2019 version 16.10.

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.

default_zone

Obtient le time_zone fuseau horaire par défaut. Pour plus d’informations sur le fonctionnement de cette rubrique, consultez l’exemple de code à la fin de cette rubrique.

static const time_zone* default_zone();

Valeur retournée

Si l’argument de modèle n’est pas fourni, la spécialisation du modèle fournit zoned_traits<const time_zone*>, qui retourne le fuseau horaire UTC. Sinon, elle retourne le fuseau horaire par défaut fourni par l’argument Tde modèle.

locate_zone

Retourne le time_zone pointeur pour le fuseau horaire spécifié. Pour plus d’informations sur le fonctionnement de cette rubrique, consultez l’exemple de code à la fin de cette rubrique.

static const time_zone* locate_zone(string_view name);

Paramètres de modèle

name
Nom du fuseau horaire à localiser. Par exemple : "UTC".

Valeur retournée

Si vous avez construit un zoned_traits sans fournir l’argument de modèle d’un pointeur de fuseau horaire personnalisé, la valeur de retour est std::chrono::locate_zone(name). Sinon, elle retourne la valeur définie dans l’argument Tde locate_zone() modèle.

Exemple : zoned_traits

Cet exemple suivant montre comment utiliser zoned_traits pour fournir un fuseau horaire par défaut personnalisé.

Tout d’abord, CustomTimeZonePtr est défini, qui fournit le pointeur vers le type de fuseau horaire personnalisé via operator->().

Ensuite, un zoned_traits est déclaré dans lequel default_zone est défini pour retourner le fuseau horaire par défaut personnalisé. Dans ce cas, le pôle Sud.

Dans l’exemple, zoned_traits<CustomTimeZonePtr>::locate_zone() passe le nom de fuseau horaire spécifié à std::chrono::locate_zone(). Cette fonction est l’endroit où vous pouvez mapper un nom de fuseau horaire personnalisé à un autre fuseau horaire.

Enfin, stdZT est défini, qui utilise le pointeur standard time_zone , car il ne fournit pas d’argument de modèle, de sorte que la spécialisation est utilisée qui fournit const std::chrono::time_zone*.

Exécutez cet exemple pour voir l’utilisation zoned_time de la commande personnalisée, puis le pointeur standard time_zone .

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

using namespace std::chrono;

struct CustomTimeZonePtr
{
    CustomTimeZonePtr() {}
    CustomTimeZonePtr(const time_zone* tz) : tzptr(tz) {}

    const time_zone* operator->() const
    {
        return tzptr;
    }

private:
    const time_zone* tzptr;
};

template <>
struct zoned_traits<CustomTimeZonePtr>
{
    static const CustomTimeZonePtr default_zone()
    {
        return CustomTimeZonePtr{ locate_zone("Antarctica/South_Pole") };
    }

    static const CustomTimeZonePtr locate_zone(std::string_view name)
    {
        // Here you can provide your own mapping between the name
        // parameter and another time zone before passing it to locate_zone()
        return CustomTimeZonePtr{ std::chrono::locate_zone(name) };
    }
};

int main()
{
    std::cout << "-- Custom time zone pointer with specialized zoned_traits and different default zone behavior --\n";
    zoned_time<seconds, CustomTimeZonePtr> myZT;
    std::cout << myZT.get_info() << "\n";

    std::cout << "-- Built-in time zone pointer with standard zoned_traits --\n";
    zoned_time<seconds, const time_zone*> stdZT;
    std::cout << stdZT.get_info() << "\n";

    return 0;
}
-- Custom time zone pointer with specialized zoned_traits and different default zone behavior --
begin: 1945-12-31 12:00:00, end: 1974-11-02 14:00:00, offset: 43200s, save: 0min, abbrev: GMT+12
-- Built-in time zone pointer with standard zoned_traits --
begin: -32767-01-01 00:00:00, end: 32767-12-31 23:59:59, offset: 0s, save: 0min, abbrev: UTC

Voir aussi

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