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 T
de 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 T
de 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