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
.
Valor retornado
No modelo de função get_info
que usa um ponto no tempo sys_time
st
, ele retorna um objeto sys_info
i
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_time
lt
, 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
Valor retornado
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
.
Valor retornado
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.
Valor retornado
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