Класс 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
функции, который занимает точку st
sys_time
времени, он возвращает sys_info
объектi
, st
который находится в диапазоне[i.begin, i.end)
.
В шаблоне get_info
функции, который занимает точку lt
local_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_sys
sys_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