Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Classe
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