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


Класс zoned_time

A zoned_time — это связывание time_zone с а time_point. Он дает time_point значение в пределах определенного часового пояса.

Синтаксис

template<class Duration, class TimeZonePtr = const time_zone*>
class zoned_time ;  // C++20

Замечания

Всегда zoned_time ссылается на допустимый часовой пояс и представляет точку во времени, которая существует и не является неоднозначной в этом часовом поясе.

Участники

Имя Описание
Конструкторы Создайте zoned_time
get_info Использует часовой пояс в этом zoned_time для получения сведений об точке времени в этой точке zoned_time.
get_local_time Объединяет часовой пояс в zoned_time хранящейся точке времени для создания локального времени в этом часовом поясе.
get_sys_time Возвращает точку времени, хранящуюся в этом zoned_time случае, без применения часового пояса.
get_time_zone Возвращает time_zone, хранящиеся в этом zoned_timeфайле.
operator= Назначьте этому значение другого zoned_timeили другого local_time zoned_timesys_timezoned_time.
operator local_time Объединяет zoned_timeчасовой пояс с хранимой точкой времени для создания локального времени в этом часовом поясе.
operator sys_time Возвращает время, хранящееся в этом zoned_time без применения часового пояса.

Не являющиеся членами

Имя Описание
operator== Определяет, равны ли два экземпляра zoned_time.
operator<< Выводит объект в заданный zoned_time поток.

Псевдонимы удобных типов

Имя Описание
zoned_seconds Синоним для zoned_time<seconds>;
zoned_time::duration Длительность, измеряемая в секундах. Это синоним common_type_t<Duration, seconds>;

Требования

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

Microsoft C++ поддерживает zoned_time класс, начиная с Visual Studio 2019 версии 16.10.

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

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

Параметр компилятора: /std:c++latest

Конструкторы

Создайте zoned_time

1) zoned_time();
2) zoned_time(const zoned_time& zt) = default;
3) explicit zoned_time(TimeZonePtr z);
4) zoned_time(const sys_time<Duration>& st);
5) explicit zoned_time(string_view name);
6) zoned_time(TimeZonePtr z, const local_time<Duration>& tp);
7) zoned_time(TimeZonePtr z, const local_time<Duration>& tp, choose c);
8) zoned_time(TimeZonePtr z, const sys_time<Duration>& st);
9) zoned_time(string_view name, const local_time<Duration>& tp);
10) zoned_time(string_view name, const local_time<Duration>& tp, choose c);
11) zoned_time(string_view name, const sys_time<Duration>& st);
12) template<class Duration, class TimeZonePtr> zoned_time(string_view name, const zoned_time<Duration>& y);
13) template<class Duration, class TimeZonePtr> zoned_time(string_view name, const zoned_time<Duration>& y, choose c);
14) template<class Duration> zoned_time(const zoned_time<Duration, TimeZonePtr>& y);
15) template<class Duration, class TimeZonePtr> zoned_time(TimeZonePtr z, const zoned_time<Duration, TimeZonePtr>& y);
16) template<class Duration, class TimeZonePtr> zoned_time(TimeZonePtr z, const zoned_time<Duration, TimeZonePtr>& y, choose);

Параметры

c
Указывает, как обрабатывать неоднозначные или несуществующие локальные времена при преобразовании объекта local_time в .sys_time Дополнительные сведения см choose . в перечислении.

name
Имя часового пояса.

st
Значение sys_time с заданной длительностью. Используется для задания времени.

tp
Значение local_time с заданной длительностью. Используется для задания времени.

y
Скопированный zoned_time для создания нового zoned_time.

z
То time_zone есть std::move(z)"d в построенный zoned_time".

zt
Указатель zoned_time , который находится std::move(zt)в построенном zoned_timeобъекте.

Замечания

1) Инициализирует часовой пояс с traits::default_zone()помощью и по умолчанию создает точку времени.
2) Конструктор копирования по умолчанию.
3) Инициализирует часовой пояс с std::move(z)помощью и по умолчанию создает точку времени.
4) Инициализирует часовой пояс и traits::default_zone()время с st.
5) Инициализирует часовой пояс и traits::locate_zone(name) создает точку времени по умолчанию.
6) Инициализирует часовой пояс и std::move(z)время, преобразуя tp как будто z->to_sys(tp).
7) Инициализирует часовой пояс и std::move(z)время, как будто z->to_sys(tp, c). См choose . перечисление о том, как параметр c влияет на результат.
8) Инициализирует часовой пояс и std::move(z)время с st.
9) Эквивалентно строительству с {traits::locate_zone(name), tp}.
10) Эквивалентно строительству с {traits::locate_zone(name), tp, c}.
11) Эквивалентно строительству с {traits::locate_zone(name), st}.
12) Эквивалентно строительству с {traits::locate_zone(name), y}.
13) Эквивалентно строительству с {traits::locate_zone(name), y, c}. Параметр choose , cне действует.
14) Инициализирует часовой пояс из yчасового пояса и точки времени.
15) Инициализирует часовой пояс и std::move(z) время от yточки времени.
16) Эквивалентно строительству с {z, y}. Параметр choose , cне действует.

Примечание.

zoned_time не имеет конструктора перемещения. Попытка переместить его приводит к копированию с помощью конструктора копирования по умолчанию.

Пример: создание zoned_time

Ниже показано, как создать экземпляр часового zoned_time пояса "Antarctica/Casey"9.15.2021 в 4:45:

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

using namespace std::chrono;

int main()
{
    zoned_time zt("Antarctica/Casey", sys_days{2021y/September/15d}+16h+45min);
    std::cout << zt;
    
    return 0;
}
2021-09-16 03:45:00 GMT+11

get_info

Использует часовой пояс в этом zoned_time для получения сведений об точке времени в этой точке zoned_time.

sys_info get_info() const;

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

Значение sys_info , содержащее смещение в формате UTC для часового пояса и времени, смещение корректировки летнего времени и т. д.

Пример: get_info

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

using namespace std::chrono;

int main()
{
    zoned_time zt("Antarctica/Casey", sys_days{2021y/September/15d}+16h+45min);
    sys_info si = zt.get_info();
    std::cout << si;

    return 0;
}
begin: 2020-10-03 16:01:00, end: 32767-12-31 23:59:59, offset: 39600s, save: 0min, abbrev: GMT+11

get_local_time

Возвращает значение local_time<duration> , представляющее местное время, заданное часовой zoned_timeпоясом и временем.

local_time<duration> get_local_time() const;

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

Возвращаемый local_time объект является синонимом.time_point<local_t, duration>

Пример: get_local_time

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

using namespace std::chrono;

int main()
{
    zoned_time zt("Antarctica/Casey", sys_days{2021y/September/15d}+16h+45min);
    std::cout << zt.get_info();

    return 0;
}
2021-09-16 03:45:00

get_sys_time

Возвращает время, хранящееся в параметре zoned_time system_clock.

sys_time<duration> get_sys_time() const;

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

Время, хранящееся в этом zoned_time, без каких-либо изменений часового пояса. Он представляет системное время настенных часов в виде time_point. Возвращаемый sys_time является синонимом template <class Duration> time_point<system_clock Duration>;

Пример: get_sys_time

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

using namespace std::chrono;

int main()
{
    zoned_time zt("Antarctica/Casey", sys_days{2021y/September/15d}+16h+45min);
    std::cout << zt.get_sys_time();

    return 0;
}
2021-09-15 16:45:00

get_time_zone

Возвращает часовой пояс, хранящийся в этом zoned_timeфайле.

TimeZonePtr get_time_zone() const;

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

Указатель на time_zone , хранящийся в этом zoned_timeфайле.

Пример: get_time_zone

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

using namespace std::chrono;

int main()
{
    zoned_time zt("Antarctica/Casey", sys_days{2021y/September/15d}+16h+45min);
    auto pTZ = zt.get_time_zone();
    std::cout << pTZ->name();

    return 0;
}
Antarctica/Casey

operator=

Назначьте другому zoned_time this . Или назначьте только другие zoned_time.sys_time local_time

1) zoned_time& operator=(const zoned_time& zt) = default;
2) zoned_time& operator=(const sys_time<Duration>& st);
3) zoned_time& operator=(const local_time<Duration>& lt);

Параметры

zt
this Назначение zoned_time одному.

st
Назначение sys_time хранящимся time_point в этом zoned_timeобъекте.

lt
Назначение local_time хранящимся time_point в этом zoned_timeобъекте.

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

*this

Пример: operator=

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

using namespace std::chrono;

int main()
{
    zoned_time zt1{}, zt2("Pacific/Galapagos", sys_days{2021y/September/15d} + 16h + 45min);
    std::cout << zt2.get_local_time() << "\n";
    zt1 = zt2.get_local_time();
    std::cout << zt1.get_local_time();

    return 0;
}
2021-09-15 10:45:00
2021-09-15 10:45:00

Замечания

1) Оператор назначения копирования по умолчанию. Копирует (не перемещает) сохраненный time_point и time_zone указатель из другого zoned_time в этот zoned_time. 2) Назначается st этому zoned_timeэлементуtime_point. После назначения *this->get_sys_time() == st; 3) преобразует lt (a local_time) в объект sys_time. Это делает это по сути так, как timeZone->to_sys(lt)и присваивает результат [time_point] в этом zoned_time. После назначения *this->get_local_time() == lt;

operator local_time

Объединяет zoned_timeчасовой пояс с хранимой точкой времени для создания локального времени в этом часовом поясе.

explicit operator local_time<duration>() const;

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

Объект, time_point<local_t, Duration> представляющий местное время для часового пояса и часового пояса в этом zoned_time. Вы можете использовать удобный псевдоним local_time для представления значения, возвращаемого этой функцией.

Возвращаемое значение эффективно timeZone->to_local(get_sys_time());

Пример: operator local_time

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

using namespace std::chrono;

int main()
{
    zoned_time zt("Pacific/Galapagos", sys_days{ 2021y / September / 15d } + 16h + 45min);
    std::cout << (local_time<seconds>)zt;

    return 0;
}
2021-09-15 10:45:00

operator sys_time

Возвращает точку времени, хранящуюся в этом zoned_time случае, без применения часового пояса.

operator sys_time<duration>() const;

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

Время, хранящееся в этом zoned_time, без каких-либо изменений часового пояса. Возвращаемый sys_time является синонимом template <class Duration> time_point<system_clock Duration>; и представляет тот же момент времени, который хранится в этом объекте zoned_time.

Пример: operator sys_time

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

using namespace std::chrono;

int main()
{
    zoned_time zt("Pacific/Galapagos", sys_days{2021y/September/15d} + 16h + 45min);
    std::cout << (sys_time<seconds>)zt;

    return 0;
}
2021-09-15 16:45:00

См. также

<chrono>
time_point
time_zone
Структура zoned_traits
Справочник по файлам заголовков