Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Struct
Permite que você associe um fuso horário padrão diferente a um zoned_time, e, opcionalmente, mapeie um nome personalizado para um fuso horário.
Sintaxe
1)
template<class T>
struct zoned_traits {}; // C++20
2)
template <>
struct zoned_traits<const time_zone*>; // C++20
Parâmetros
1) T - Um ponteiro para um tipo que fornece um time_zone personalizado.
2) Quando você não fornece o argumento do modelo time_zone*, essa especialização fornece const std::chrono::time_zone*, cujo padrão é o fuso horário UTC.
Comentários
O ponteiro para o tipo que você fornece não precisa fornecer as funções estáticas default_zone() ou locate_zone(). Mas se isso não acontecer, os construtores zoned_time não serão considerados durante a resolução de sobrecarga.
Membros
| Nome | Descrição |
|---|---|
default_zone |
Obtém o ponteiro time_zone para o fuso horário padrão. |
locate_zone |
Obtém o ponteiro time_zone para o fuso horário especificado. |
Requisitos
Cabeçalho: <chrono>
Namespace: std::chrono
Opção do compilador: /std:c++latest
O Microsoft C++ dá suporte à classe zoned_traits a partir do Visual Studio 2019 versão 16.10.
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.
default_zone
Obtém o time_zone para o fuso horário padrão. Para obter mais informações sobre como isso funciona, consulte o código exemplo no final deste tópico.
static const time_zone* default_zone();
Valor retornado
Se o argumento do modelo não for fornecido, a especialização do modelo fornecerá zoned_traits<const time_zone*>, que retorna o fuso horário UTC. Caso contrário, ele retornará o fuso horário padrão fornecido pelo argumento de modelo T.
locate_zone
Retorna o ponteiro time_zone para o fuso horário especificado. Para obter mais informações sobre como isso funciona, consulte o código exemplo no final deste tópico.
static const time_zone* locate_zone(string_view name);
Parâmetros de modelo
name
O nome do fuso horário a ser localizado. Por exemplo, "UTC".
Valor retornado
Se você construiu um zoned_traits sem fornecer o argumento de modelo de um ponteiro de fuso horário personalizado, o valor de retorno será std::chrono::locate_zone(name). Caso contrário, ele retorna o valor de locate_zone() conforme definido no argumento de modelo T.
Exemplo: zoned_traits
Este exemplo a seguir mostra como usar zoned_traits para fornecer um fuso horário padrão personalizado.
Primeiro, CustomTimeZonePtr é definido, o que fornece o ponteiro para o tipo de fuso horário personalizado por meio de operator->().
Em seguida, um zoned_traits é declarado, no qual default_zone é definido para retornar o fuso horário padrão personalizado. Neste caso, o Polo Sul.
No exemplo, zoned_traits<CustomTimeZonePtr>::locate_zone() passa o nome do fuso horário especificado para std::chrono::locate_zone(). Essa função é onde você pode mapear um nome de fuso horário personalizado para outro fuso horário.
Por fim, stdZT é definido,o qual usa o ponteiro time_zone padrão porque não fornece um argumento de modelo, portanto, é usada a especialização que fornece const std::chrono::time_zone*.
Execute este exemplo para ver o zoned_time usar o ponteiro personalizado e, em seguida, o ponteiro time_zone padrão.
// 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
Confira também
<chrono>
time_zone
zoned_time classe
Referência de arquivos de cabeçalho