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