Classe time_zone

Un time_zone oggetto rappresenta il fuso orario per un'area geografica specifica. Ha la cronologia completa delle regole del fuso orario per ogni area, in modo che le conversioni temporali siano accurate se si converte un'ora per una data in cui le regole sono diverse per il fuso orario rispetto a oggi.

Sintassi

class time_zone;  // Since C++20

Osservazioni:

La <chrono> libreria crea time_zone oggetti come parte dell'inizializzazione del database del fuso orario. const Fornisce l'accesso agli oggetti creati.

Non è possibile costruire o copiare un time_zone oggetto e l'uso del costruttore di spostamento predefinito o dell'operatore di assegnazione di spostamento predefinito comporta un comportamento non definito.

Questo è il modo in cui si ottiene un'istanza time_zone :

const auto& timeZoneDatabase = get_tzdb(); // initialize the time zone database
const auto& currentZone = timeZoneDatabase.current_zone();

Microsoft C++ supporta la time_zone classe a partire da Visual Studio 2019 versione 16.10. La time_zone classe è una funzionalità C++20. L'opzione /std:c++latest del compilatore è obbligatoria.

Membri

Funzioni membro pubbliche e modelli di funzione

Nome Descrizione
get_info Ottiene un oggetto sys_info o local_info per l'oggetto time_zone.
name Ottiene il nome di time_zone.
to_local Converte un oggetto sys_time in in local_time .time_zone
to_sys Converte un oggetto local_time in in sys_time .time_zone

Requisiti

Intestazione: <chrono>

I dati del fuso orario sono disponibili solo per Windows 10 versione 1903/19H1 e successive e Windows Server 2022 e versioni successive.

Spazio dei nomi: std::chrono

get_info

Il modello get_info di funzione ha due overload che ottengono un oggetto sys_info o local_info per questo time_zoneoggetto .

template<class Duration>
sys_info get_info(const sys_time<Duration>& st) const;  // Since C++20
    
template<class Duration>
local_info get_info(const local_time<Duration>& lt) const;  // Since C++20

Parametri

Duration
Classe duration per il sys_time parametro o local_time .

st
Punto sys_time di tempo utilizzato per ottenere un sys_info risultato.

lt
Punto local_time di tempo utilizzato per ottenere un local_info risultato.

Valore restituito

get_info Nel modello di funzione che richiede un sys_time punto stdi tempo restituisce un sys_info oggetto i in modo che st si trova nell'intervallo [i.begin, i.end).

get_info Nel modello di funzione che richiede un local_time punto ltdi tempo restituisce un local_info oggetto .

Osservazioni:

Microsoft C++ supporta time_zone::get_info l'avvio in Visual Studio 2019 versione 16.10. La funzione è una funzionalità C++20 che richiede l'opzione del /std:c++latest compilatore.

name

Ottiene il nome di time_zone.

string_view name() const noexcept;  // Since C++20

Valore restituito

Restituisce il nome del fuso orario come .string_view

Osservazioni:

Microsoft C++ supporta time_zone::name l'avvio in Visual Studio 2019 versione 16.10.

to_local

Il modello to_local di funzione converte un oggetto sys_time in in local_time questo time_zoneoggetto .

template<class Duration>
local_time<common_type_t<Duration, seconds>>
to_local(const sys_time<Duration>& st) const;  // Since C++20

Parametri

Duration
Classe duration per il sys_time parametro o local_time .

st
Punto sys_time di tempo utilizzato per ottenere un sys_info risultato.

Valore restituito

to_local restituisce l'oggetto local_time associato a st in questo time_zoneoggetto .

Osservazioni:

Microsoft C++ supporta time_zone::to_local l'avvio in Visual Studio 2019 versione 16.10. La funzione è una funzionalità C++20 che richiede l'opzione del /std:c++latest compilatore.

Esempio: convertire sys_time in local_time

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

using namespace std::chrono;

int main()
{
    const auto& timeZoneDatabase = get_tzdb();
    const auto& currentZone = timeZoneDatabase.current_zone();
    local_time<system_clock::duration> lt = currentZone->to_local(system_clock::now());

    std::cout << "local_time: " << lt << "\n";
   
    return 0;
}
local_time: 2021-09-08 15:15:53.1830646

to_sys

Il modello di to_sys funzione ha due overload che converte un oggetto local_time in in sys_time questo time_zoneoggetto .

template<class Duration>
sys_time<common_type_t<Duration, seconds>>
to_sys(const local_time<Duration>& lt) const;  // Since C++20

template<class Duration>
sys_time<common_type_t<Duration, seconds>>
to_sys(const local_time<Duration>& lt, choose z) const;  // Since C++20

Parametri

Duration
Classe duration per il local_time parametro .

lt
Punto local_time di tempo da convertire.

z
Valore di choose::earliest o choose::latest. Viene usato per risolvere risultati altrimenti ambigui.

Valore restituito

to_sys restituisce un oggetto sys_time che è almeno corretto come seconds. È più corretto se l'argomento lt ha precisione più fine. L'oggetto restituito sys_time è l'equivalente UTC di lt in base alle regole di questo time_zone.

L'overload di un parametro genera un'eccezione ambiguous_local_time se la conversione da lt a un sys_time oggetto è ambigua e un'eccezione nonexistent_local_time se il punto ora locale rappresenta un punto orario locale inesistente. L'ambiguità può verificarsi durante la transizione dell'ora legale alla transizione dell'ora solare. Due istanze dello stesso punto orario locale possono verificarsi in un giorno. Un punto orario locale inesistente rappresenta un punto di ora nella transizione dall'ora solare all'ora legale.

L'overload a due parametri non genera un'eccezione in questi casi. Se la conversione da lt a è sys_time ambigua, to_sys restituisce il valore precedente sys_time se z è choose::earlieste restituisce il valore successivo sys_time se z è choose::latest. Se rappresenta lt un'ora inesistente tra due punti ora UTC, i due punti ora UTC sono gli stessi, quindi to_sys restituisce il punto di ora UTC.

Osservazioni:

Microsoft C++ supporta time_zone::to_sys l'avvio in Visual Studio 2019 versione 16.10. La funzione è una funzionalità C++20 che richiede l'opzione del /std:c++latest compilatore.

Esempio: convertire local_time in sys_time

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

using namespace std::chrono;

int main()
{
    const auto& timeZoneDatabase = get_tzdb();
    const auto& currentZone = timeZoneDatabase.current_zone();

    auto st = currentZone->to_sys(local_days{2021y/September/15d}+16h+45min, choose::earliest);

    std::cout << "sys_time: " << st << "\n";
   
    return 0;
}
sys_time: 2021-09-15 23:45:00.0000000

Vedi anche

<chrono>
Informazioni di riferimento per i file di intestazione