Struct zoned_traits
Consente di associare un fuso orario predefinito diverso a un zoned_time
oggetto e, facoltativamente, eseguire il mapping di un nome personalizzato a un fuso orario.
Sintassi
1)
template<class T>
struct zoned_traits {}; // C++20
2)
template <>
struct zoned_traits<const time_zone*>; // C++20
Parametri
1) T
- Puntatore a un tipo che fornisce un oggetto personalizzato time_zone
.
2) Quando non si specifica l'argomento time_zone*
modello, questa specializzazione fornisce const std::chrono::time_zone*
, che per impostazione predefinita corrisponde al fuso orario UTC.
Osservazioni:
Il puntatore al tipo fornito non deve fornire le funzioni default_zone()
statiche o locate_zone()
. In caso contrario, tuttavia, i costruttori non verranno considerati durante la zoned_time
risoluzione dell'overload.
Membri
Nome | Descrizione |
---|---|
default_zone |
Ottiene il time_zone puntatore per il fuso orario predefinito. |
locate_zone |
Ottiene il time_zone puntatore per il fuso orario specificato. |
Requisiti
Intestazione: <chrono>
Spazio dei nomi: std::chrono
Opzione del compilatore: /std:c++latest
Microsoft C++ supporta zoned_traits
la classe a partire da Visual Studio 2019 versione 16.10.
I dati del fuso orario sono disponibili solo per Windows 10 versione 1903/19H1 e successive e Windows Server 2022 e versioni successive.
default_zone
Ottiene l'oggetto time_zone
per il fuso orario predefinito. Per altre informazioni sul funzionamento di questo argomento, vedere l'esempio di codice alla fine di questo argomento.
static const time_zone* default_zone();
Valore restituito
Se l'argomento modello non viene specificato, la specializzazione del modello fornisce zoned_traits<const time_zone*>
, che restituisce il fuso orario UTC. In caso contrario, restituisce il fuso orario predefinito fornito dall'argomento T
modello .
locate_zone
Restituisce il time_zone
puntatore per il fuso orario specificato. Per altre informazioni sul funzionamento di questo argomento, vedere l'esempio di codice alla fine di questo argomento.
static const time_zone* locate_zone(string_view name);
Parametri del modello
name
Nome del fuso orario da individuare. Ad esempio: "UTC"
.
Valore restituito
Se è stato creato un zoned_traits
oggetto senza fornire l'argomento modello di un puntatore del fuso orario personalizzato, il valore restituito è std::chrono::locate_zone(name)
. In caso contrario, restituisce il valore di locate_zone()
come definito nell'argomento T
modello .
Esempio: zoned_traits
Questo esempio seguente illustra come usare zoned_traits
per fornire un fuso orario predefinito personalizzato.
In primo luogo, CustomTimeZonePtr
viene definito, che fornisce il puntatore al tipo di fuso orario personalizzato tramite operator->()
.
Viene quindi dichiarato un oggetto zoned_traits
in cui default_zone
viene definito per restituire il fuso orario predefinito personalizzato. In questo caso, il Polo Sud.
Nell'esempio passa zoned_traits<CustomTimeZonePtr>::locate_zone()
il nome del fuso orario specificato a std::chrono::locate_zone()
. Questa funzione consente di eseguire il mapping di un nome di fuso orario personalizzato a un altro fuso orario.
stdZT
Viene infine definito, che usa il puntatore standard time_zone
perché non fornisce un argomento di modello, quindi viene usata la specializzazione che fornisce const std::chrono::time_zone*
.
Eseguire questo esempio per visualizzare l'uso dell'oggetto zoned_time
personalizzato e quindi il puntatore 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
Vedi anche
<chrono>
time_zone
Classe zoned_time
Informazioni di riferimento per i file di intestazione