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


Класс time_zone

A time_zone представляет часовой пояс для определенной географической области. Он имеет полную историю правил часового пояса для каждой области, поэтому преобразования времени будут точными, если вы преобразуете время для даты назад, когда правила отличаются для часового пояса, чем сегодня.

Синтаксис

class time_zone;  // Since C++20

Замечания

Библиотека <chrono> создает time_zone объекты в рамках инициализации базы данных часового пояса. Он предоставляет const доступ к созданным объектам.

Невозможно создать или скопировать time_zone объект, и использование конструктора перемещения по умолчанию или оператора перемещения по умолчанию приводит к неопределенному поведению.

Вот как вы получите time_zone экземпляр:

const auto& timeZoneDatabase = get_tzdb(); // initialize the time zone database
const auto& currentZone = timeZoneDatabase.current_zone();

Microsoft C++ поддерживает time_zone класс, начиная с Visual Studio 2019 версии 16.10. Класс time_zone представляет собой функцию C++20. /std:c++latest Требуется параметр компилятора.

Участники

Общедоступные функции-члены и шаблоны функций

Имя Описание
get_info sys_info Получает или local_info для этогоtime_zone.
name Возвращает имя этого аспекта time_zone.
to_local Преобразует объект sys_time local_time в этот time_zoneобъект.
to_sys Преобразует объект local_time sys_time в этот time_zoneобъект.

Требования

Заголовок: <chrono>

Данные часового пояса доступны только для Windows 10 версии 1903/19H1 и более поздних версий, а также Windows Server 2022 и более поздних версий.

Пространство имен: std::chrono

get_info

Шаблон функции get_info имеет две перегрузки, которые получают sys_info или local_info для этого time_zone.

template<class Duration>
sys_info get_info(const sys_time<Duration>& st) const;  // Since C++20
    
template<class Duration>
local_info get_info(const local_time<Duration>& lt) const;  // Since C++20

Параметры

Duration
duration Класс для sys_time или local_time параметра.

st
Точка времени, используемая sys_time для получения sys_info результата.

lt
Точка времени, используемая local_time для получения local_info результата.

Возвращаемое значение

В шаблоне get_info функции, который занимает точку stsys_time времени, он возвращает sys_info объектi, st который находится в диапазоне[i.begin, i.end).

В шаблоне get_info функции, который занимает точку ltlocal_time времени, он возвращает local_info объект.

Замечания

Microsoft C++ поддерживает начиная time_zone::get_info с Visual Studio 2019 версии 16.10. Функция — это функция C++20, требующая параметра компилятора /std:c++latest .

name

Возвращает имя этого аспекта time_zone.

string_view name() const noexcept;  // Since C++20

Возвращаемое значение

Возвращает имя часового пояса в виде string_view.

Замечания

Microsoft C++ поддерживает начиная time_zone::name с Visual Studio 2019 версии 16.10.

to_local

Шаблон функции to_local преобразуется sys_time в этот local_time time_zoneпараметр.

template<class Duration>
local_time<common_type_t<Duration, seconds>>
to_local(const sys_time<Duration>& st) const;  // Since C++20

Параметры

Duration
duration Класс для sys_time или local_time параметра.

st
Точка времени, используемая sys_time для получения sys_info результата.

Возвращаемое значение

to_local возвращает связанный local_time с st этим time_zoneобъект.

Замечания

Microsoft C++ поддерживает начиная time_zone::to_local с Visual Studio 2019 версии 16.10. Функция — это функция C++20, требующая параметра компилятора /std:c++latest .

Пример: преобразование sys_time в local_time

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

using namespace std::chrono;

int main()
{
    const auto& timeZoneDatabase = get_tzdb();
    const auto& currentZone = timeZoneDatabase.current_zone();
    local_time<system_clock::duration> lt = currentZone->to_local(system_clock::now());

    std::cout << "local_time: " << lt << "\n";
   
    return 0;
}
local_time: 2021-09-08 15:15:53.1830646

to_sys

Шаблон функции to_sys имеет две перегрузки, которые преобразуют в local_time него sys_time time_zone.

template<class Duration>
sys_time<common_type_t<Duration, seconds>>
to_sys(const local_time<Duration>& lt) const;  // Since C++20

template<class Duration>
sys_time<common_type_t<Duration, seconds>>
to_sys(const local_time<Duration>& lt, choose z) const;  // Since C++20

Параметры

Duration
duration Класс для local_time параметра.

lt
Точка local_time времени для преобразования.

z
Значение choose::earliest или choose::latest. Он используется для устранения неоднозначных результатов.

Возвращаемое значение

to_syssys_time возвращает, по крайней мере, так же хорошоseconds. Это более точно, если аргумент lt имеет более точную точность. Возвращаемый sys_time объект является эквивалентом lt UTC в соответствии с правилами этого time_zone.

Перегрузка с одним параметром создает ambiguous_local_time исключение, если преобразование из lt sys_time него является неоднозначным, и nonexistent_local_time исключение, если локальная точка времени представляет собой несуществующую локальную точку времени. Неоднозначность может произойти во время летнего перехода к стандартному времени. Два экземпляра одной локальной точки времени могут происходить в один день. Несуществующая локальная точка времени представляет точку времени перехода с стандартного времени на летнее время.

Перегрузка с двумя параметрами не создает исключение в этих случаях. Если преобразование из lt sys_time неявного, to_sys возвращает более раннее sys_time значение, если z имеет значение choose::earliest, и возвращает более поздний sys_time , если z имеет значение choose::latest. Если значение lt представляет несуществующее время между двумя точками времени в формате UTC, то два точек времени в формате UTC совпадают, поэтому to_sys возвращает этот момент времени в формате UTC.

Замечания

Microsoft C++ поддерживает начиная time_zone::to_sys с Visual Studio 2019 версии 16.10. Функция — это функция C++20, требующая параметра компилятора /std:c++latest .

Пример: преобразование local_time в sys_time

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

using namespace std::chrono;

int main()
{
    const auto& timeZoneDatabase = get_tzdb();
    const auto& currentZone = timeZoneDatabase.current_zone();

    auto st = currentZone->to_sys(local_days{2021y/September/15d}+16h+45min, choose::earliest);

    std::cout << "sys_time: " << st << "\n";
   
    return 0;
}
sys_time: 2021-09-15 23:45:00.0000000

См. также

<chrono>
Справочник по файлам заголовков