Compartir vía


Estructura zoned_traits

Le permite asociar una zona horaria predeterminada diferente a zoned_time, y, opcionalmente, asignar un nombre personalizado una zona horaria.

Sintaxis

1)
template<class T>
struct zoned_traits {}; // C++20

2)
template <>
struct zoned_traits<const time_zone*>; // C++20

Parámetros

1) T - Puntero a un tipo que proporciona un valor time_zone personalizado.
2) Cuando no se proporciona el argumento de plantilla time_zone*, esta especialización proporciona const std::chrono::time_zone*, que tiene como valor predeterminado la zona horaria UTC.

Comentarios

El puntero al tipo proporcionado no tiene que proporcionar las funciones estáticas default_zone() ni locate_zone(). Pero si no es así, los constructores zoned_time no se tendrán en cuenta durante la resolución de sobrecargas.

Miembros

Nombre Descripción
default_zone Obtiene el puntero time_zone de la zona horaria predeterminada.
locate_zone Obtiene el puntero time_zone para la zona horaria especificada.

Requisitos

Encabezado: <chrono>

Espacio de nombres: std::chrono

Opción del compilador: /std:c++latest

Microsoft C++ admite la clase zoned_traits a partir de Visual Studio 2019, versión 16.10.

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.

default_zone

Obtiene el valor time_zone para la zona horaria predeterminada. Para obtener más información sobre cómo funciona, vea el ejemplo de código al final de este tema.

static const time_zone* default_zone();

Valor devuelto

Si no se proporciona el argumento de plantilla, la especialización de la plantilla proporciona zoned_traits<const time_zone*>, que devuelve la zona horaria UTC. De lo contrario, devuelve la zona horaria predeterminada proporcionada por el argumento de plantilla T.

locate_zone

Devuelve el puntero time_zone para la zona horaria especificada. Para obtener más información sobre cómo funciona, vea el ejemplo de código al final de este tema.

static const time_zone* locate_zone(string_view name);

Parámetros de plantilla

name
Nombre de la zona horaria que se va a buscar. Por ejemplo, "UTC".

Valor devuelto

Si ha creado un objeto zoned_traits sin proporcionar el argumento de plantilla de un puntero de zona horaria personalizado, el valor devuelto es std::chrono::locate_zone(name). De lo contrario, devuelve el valor de locate_zone() tal y como se define en el argumento de plantilla T.

Ejemplo: zoned_traits

En el ejemplo siguiente se muestra cómo usar zoned_traits para proporcionar una zona horaria predeterminada personalizada.

En primer lugar, se define CustomTimeZonePtr, que proporciona el puntero al tipo de zona horaria personalizada a través de operator->().

A continuación, se declara un valor zoned_traits en el que se define default_zone para devolver la zona horaria predeterminada personalizada. En este caso, el Polo Sur.

En el ejemplo, zoned_traits<CustomTimeZonePtr>::locate_zone() pasa el nombre de zona horaria especificado a std::chrono::locate_zone(). En esta función se puede asignar un nombre de zona horaria personalizado a otra zona horaria.

Por último, se define stdZT, que usa el puntero estándar time_zone porque no proporciona un argumento de plantilla, por lo que se usa la especialización que proporciona const std::chrono::time_zone*.

Ejecute este ejemplo para ver el uso del valor zoned_time personalizado y, a continuación, el puntero time_zone estándar.

// compile using: /std:c++latest
#include <iostream>
#include <chrono>

using namespace std::chrono;

struct CustomTimeZonePtr
{
    CustomTimeZonePtr() {}
    CustomTimeZonePtr(const time_zone* tz) : tzptr(tz) {}

    const time_zone* operator->() const
    {
        return tzptr;
    }

private:
    const time_zone* tzptr;
};

template <>
struct zoned_traits<CustomTimeZonePtr>
{
    static const CustomTimeZonePtr default_zone()
    {
        return CustomTimeZonePtr{ locate_zone("Antarctica/South_Pole") };
    }

    static const CustomTimeZonePtr locate_zone(std::string_view name)
    {
        // Here you can provide your own mapping between the name
        // parameter and another time zone before passing it to locate_zone()
        return CustomTimeZonePtr{ std::chrono::locate_zone(name) };
    }
};

int main()
{
    std::cout << "-- Custom time zone pointer with specialized zoned_traits and different default zone behavior --\n";
    zoned_time<seconds, CustomTimeZonePtr> myZT;
    std::cout << myZT.get_info() << "\n";

    std::cout << "-- Built-in time zone pointer with standard zoned_traits --\n";
    zoned_time<seconds, const time_zone*> stdZT;
    std::cout << stdZT.get_info() << "\n";

    return 0;
}
-- Custom time zone pointer with specialized zoned_traits and different default zone behavior --
begin: 1945-12-31 12:00:00, end: 1974-11-02 14:00:00, offset: 43200s, save: 0min, abbrev: GMT+12
-- Built-in time zone pointer with standard zoned_traits --
begin: -32767-01-01 00:00:00, end: 32767-12-31 23:59:59, offset: 0s, save: 0min, abbrev: UTC

Consulte también

<chrono>
time_zone
Clase zoned_time
Referencia de archivos de encabezado