Compartir vía


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

Consulte también

<chrono>
Referencia de archivos de encabezado