Classe time_zone

Um time_zone representa o fuso horário de uma área geográfica específica. Ele tem o histórico completo de regras de fuso horário de cada área, portanto, as conversões de hora serão precisas se você converter uma hora em uma data na qual as regras eram diferentes quanto ao fuso horário de como são hoje.

Sintaxe

class time_zone;  // Since C++20

Comentários

A biblioteca <chrono> cria objetos time_zone como parte da inicialização do banco de dados de fuso horário dela. Ela fornece acesso const aos objetos criados.

Não é possível construir ou copiar um objeto time_zone, e o uso do construtor de movimentação padrão ou do operador de atribuição de movimentação padrão resulta em um comportamento indefinido.

Veja como obter uma instância de time_zone:

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

O Microsoft C++ dá suporte à classe time_zone no Visual Studio 2019 versão 16.10 e posteriores. A classe time_zone é um recurso C++20. A opção do compilador /std:c++latest é necessária.

Membros

Funções membro públicas e modelos de função

Nome Descrição
get_info Obtém um sys_info ou local_info para este time_zone.
name Obtém o nome deste time_zone.
to_local Converte um sys_time em um local_time neste time_zone.
to_sys Converte um local_time em um sys_time neste time_zone.

Requisitos

Cabeçalho<chrono>:

Os dados de fuso horário só estão disponíveis para Windows 10 versão 1903/19H1 e posterior e no Windows Server 2022 e posterior.

Namespace:std::chrono

get_info

O modelo de função get_info tem duas sobrecargas que obtêm um sys_info ou local_info para este time_zone.

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

Parâmetros

Duration
A classe duration para o parâmetro sys_time ou local_time.

st
O ponto no tempo sys_time usado para obter um resultado sys_info.

lt
O ponto no tempo local_time usado para obter um resultado local_info.

Retornar valor

No modelo de função get_info que usa um ponto no tempo sys_timest, ele retorna um objeto sys_infoi de modo que st está no intervalo [i.begin, i.end).

No modelo de função get_info que usa um ponto no tempo local_timelt, ele retorna um objeto local_info.

Comentários

O Microsoft C++ dá suporte a time_zone::get_info no Visual Studio 2019 versão 16.10 e posteriores. A função é um recurso C++20 que exige a opção do compilador /std:c++latest.

name

Obtém o nome deste time_zone.

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

Retornar valor

Retorna o nome do fuso horário como string_view.

Comentários

O Microsoft C++ dá suporte a time_zone::name no Visual Studio 2019 versão 16.10 e posteriores.

to_local

O modelo de função to_local converte um sys_time em um local_time neste time_zone.

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

Parâmetros

Duration
A classe duration para o parâmetro sys_time ou local_time.

st
O ponto no tempo sys_time usado para obter um resultado sys_info.

Retornar valor

to_local retorna o local_time associado a st neste time_zone.

Comentários

O Microsoft C++ dá suporte a time_zone::to_local no Visual Studio 2019 versão 16.10 e posteriores. A função é um recurso C++20 que exige a opção do compilador /std:c++latest.

Exemplo: converter sys_time em 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

O modelo de função to_sys tem duas sobrecargas que convertem um local_time em um sys_time neste time_zone.

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

Parâmetros

Duration
A classe duration para o parâmetro local_time.

lt
O ponto no tempo local_time a converter.

z
Um valor de choose::earliest ou choose::latest. Ele é usado para resolver resultados que de outra forma seriam ambíguos.

Retornar valor

to_sys retorna um sys_time que é pelo menos tão bom quanto seconds. Será mais fino se o argumento lt tiver precisão mais fina. O sys_time retornado é o equivalente UTC de lt de acordo com as regras deste time_zone.

A sobrecarga de um parâmetro gera uma exceção ambiguous_local_time se a conversão de lt em um sys_time é ambígua e uma exceção nonexistent_local_time se o ponto no tempo local representa um ponto no tempo local inexistente. A ambiguidade pode acontecer durante uma transição do horário de verão para o horário padrão. Duas instâncias do mesmo ponto no tempo local podem ocorrer em um dia. Um ponto no tempo local inexistente representa um ponto no tempo na transição do horário padrão para o horário de verão.

A sobrecarga de dois parâmetros não gera uma exceção nesses casos. Se a conversão de lt em sys_time for ambígua, to_sys retornará o sys_time anterior se z for choose::earliest, e retornará o sys_time posterior se z for choose::latest. Se o lt representar um tempo inexistente entre dois pontos no tempo UTC, os dois pontos no tempo UTC serão os mesmos, portanto to_sys retornará esse ponto no tempo UTC.

Comentários

O Microsoft C++ dá suporte a time_zone::to_sys no Visual Studio 2019 versão 16.10 e posteriores. A função é um recurso C++20 que exige a opção do compilador /std:c++latest.

Exemplo: converter local_time em 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

Confira também

<chrono>
Referência de arquivos de cabeçalho