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
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour