Поделиться через


Структура 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
Справочник по файлам заголовков