Clase time_zone
Un elemento time_zone
representa la zona horaria de un área geográfica específica. Tiene el historial completo de reglas de zona horaria para cada área. Así pues, las conversiones de hora serán precisas siempre que convierta una hora de una fecha pasada y las reglas sean distintas para la zona horaria en comparación con el presente.
Sintaxis
class time_zone; // Since C++20
Comentarios
La biblioteca <chrono>
crea objetos time_zone
como parte de su inicialización de base de datos de zonas horarias. Proporciona acceso de const
a los objetos creados.
No se puede crear ni copiar un objeto time_zone
, y el uso del constructor de movimiento o del operador de asignación de movimiento predeterminados da como resultado un comportamiento indefinido.
Así se obtiene una instancia time_zone
:
const auto& timeZoneDatabase = get_tzdb(); // initialize the time zone database
const auto& currentZone = timeZoneDatabase.current_zone();
Microsoft C++ admite la clase time_zone
a partir de Visual Studio 2019, versión 16.10. La clase time_zone
es una característica de C++20. La opción del compilador /std:c++latest
no es necesaria.
Miembros
Funciones miembro públicas y plantillas de función
Nombre | Descripción |
---|---|
get_info |
Obtiene un sys_info o local_info para este time_zone . |
name |
Obtiene el nombre de time_zone . |
to_local |
Convierte un sys_time en un local_time en este time_zone . |
to_sys |
Convierte un local_time en un sys_time en este time_zone . |
Requisitos
Encabezado: <chrono>
Los datos de zona horaria solo están disponibles para la versión 1903/19H1 y posteriores de Windows 10, además de Windows Server 2022 y versiones posteriores.
Espacio de nombres: std::chrono
get_info
La plantilla de función get_info
tiene dos sobrecargas que obtienen un sys_info
o 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
La clase duration
para el parámetro sys_time
o local_time
.
st
El momento sys_time
usado para obtener un resultado sys_info
.
lt
El momento local_time
usado para obtener un resultado local_info
.
Valor devuelto
En la plantilla de función get_info
que toma un momento sys_time
de tipo st
, se devuelve un objeto sys_info
de tipo i
, de modo que st
esté en el intervalo [i.begin, i.end)
.
En la plantilla de función get_info
que toma un momento local_time
de tipo lt
, se devuelve un objeto local_info
.
Comentarios
Microsoft C++ admite time_zone::get_info
a partir de Visual Studio 2019, versión 16.10. La función es una característica de C++20 que requiere la opción del compilador /std:c++latest
.
name
Obtiene el nombre de time_zone
.
string_view name() const noexcept; // Since C++20
Valor devuelto
Devuelve el nombre de la zona horaria en forma de string_view
.
Comentarios
Microsoft C++ admite time_zone::name
a partir de Visual Studio 2019, versión 16.10.
to_local
La plantilla de función to_local
convierte un sys_time
en un local_time
en este 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
La clase duration
para el parámetro sys_time
o local_time
.
st
El momento sys_time
usado para obtener un resultado sys_info
.
Valor devuelto
to_local
devuelve el local_time
asociado a st
en este time_zone
.
Comentarios
Microsoft C++ admite time_zone::to_local
a partir de Visual Studio 2019, versión 16.10. La función es una característica de C++20 que requiere la opción del compilador /std:c++latest
.
Ejemplo: conversión de sys_time
en 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
La plantilla de función to_sys
tiene dos sobrecargas que convierten un local_time
en un sys_time
en este 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
La clase duration
para el parámetro local_time
.
lt
El momento local_time
que se convertirá.
z
Un valor de choose::earliest
o choose::latest
. Se usa para resolver resultados ambiguos de otra manera.
Valor devuelto
to_sys
devuelve un sys_time
que es por lo menos igual de preciso que seconds
. Es más preciso si el argumento lt
tiene una precisión más ajustada. El sys_time
devuelto es el equivalente en UTC de lt
según las reglas de este time_zone.
La sobrecarga de un parámetro genera una excepción ambiguous_local_time
si la conversión de lt
en un sys_time
es ambigua y una excepción nonexistent_local_time
si la hora local representa un momento local inexistente. La ambigüedad puede ocurrir durante el paso del horario de verano a la hora estándar. Dos instancias del mismo momento local pueden producirse en un día. Un momento local inexistente representa un momento de la transición de la hora estándar al horario de verano.
En estos casos, la sobrecarga de dos parámetros no genera una excepción. Si la conversión de lt
a sys_time
es ambigua, to_sys
devuelve el sys_time
anterior en el caso de que z
sea choose::earliest
y devuelve el sys_time
posterior en el caso de que z
sea choose::latest
. Si el lt
representa una hora inexistente entre dos momentos UTC, ambos momentos son los mismos, por lo que to_sys
devuelve ese momento UTC.
Comentarios
Microsoft C++ admite time_zone::to_sys
a partir de Visual Studio 2019, versión 16.10. La función es una característica de C++20 que requiere la opción del compilador /std:c++latest
.
Ejemplo: conversión de local_time
en 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