Структура zoned_traits
Позволяет связать другой часовой пояс по умолчанию с часовой поясом и при необходимости сопоставить пользовательское имя с zoned_time
часовыми поясами.
Синтаксис
1)
template<class T>
struct zoned_traits {}; // C++20
2)
template <>
struct zoned_traits<const time_zone*>; // C++20
Параметры
1) T
— указатель на тип, предоставляющий настраиваемый time_zone
.
2) Если аргумент шаблона не указан time_zone*
, эта специализация предоставляется const std::chrono::time_zone*
по умолчанию для часового пояса UTC.
Замечания
Указатель на указанный тип не должен предоставлять статические функции default_zone()
или locate_zone()
. Но если это не так, zoned_time
конструкторы не будут считаться во время разрешения перегрузки.
Участники
Имя | Описание |
---|---|
default_zone |
time_zone Возвращает указатель для часового пояса по умолчанию. |
locate_zone |
time_zone Возвращает указатель для указанного часового пояса. |
Требования
Заголовок: <chrono>
Пространство имен: std::chrono
Параметр компилятора: /std:c++latest
Microsoft C++ поддерживает zoned_traits
класс, начиная с Visual Studio 2019 версии 16.10.
Данные часового пояса доступны только для Windows 10 версии 1903/19H1 и более поздних версий, а также Windows Server 2022 и более поздних версий.
default_zone
Возвращает часовой time_zone
пояс по умолчанию. Дополнительные сведения о том, как это работает, см. в примере кода в конце этого раздела.
static const time_zone* default_zone();
Возвращаемое значение
Если аргумент шаблона не указан, специализация шаблона предоставляет zoned_traits<const time_zone*>
, которая возвращает часовой пояс UTC. В противном случае возвращается часовой пояс по умолчанию, предоставленный аргументом T
шаблона.
locate_zone
time_zone
Возвращает указатель для указанного часового пояса. Дополнительные сведения о том, как это работает, см. в примере кода в конце этого раздела.
static const time_zone* locate_zone(string_view name);
Параметры шаблона
name
Имя часового пояса для поиска. Например, "UTC"
.
Возвращаемое значение
Если вы создали шаблон zoned_traits
, не предоставляя аргумент шаблона пользовательского указателя часового пояса, возвращается std::chrono::locate_zone(name)
значение. В противном случае возвращается значение locate_zone()
, определенное в аргументе T
шаблона.
Пример: zoned_traits
В следующем примере показано, как использовать zoned_traits
для предоставления пользовательского часового пояса по умолчанию.
Во-первых, определяется, CustomTimeZonePtr
который предоставляет указатель на пользовательский тип часового пояса через operator->()
.
Затем объявляется объект zoned_traits
, в котором default_zone
определяется возврат пользовательского часового пояса по умолчанию. В этом случае южный полюс.
В примере zoned_traits<CustomTimeZonePtr>::locate_zone()
передает указанное имя std::chrono::locate_zone()
часового пояса в . Эта функция позволяет сопоставить пользовательское имя часового пояса с другим часовыми поясами.
Наконец, определен, stdZT
который использует стандартный time_zone
указатель, так как он не предоставляет аргумент шаблона, поэтому специализация используется для предоставления const std::chrono::time_zone*
.
Запустите этот пример, чтобы просмотреть zoned_time
использование пользовательского, а затем стандартного указателя time_zone
.
// 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
См. также
<chrono>
time_zone
Класс zoned_time
Справочник по файлам заголовков