Condividi tramite


Struct zoned_traits

Consente di associare un fuso orario predefinito diverso a un zoned_timeoggetto 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 Tmodello .

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 Tmodello .

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