# std::chrono::zoned_time<Duration,TimeZonePtr>::zoned_time

< cpp‎ | chrono‎ | zoned time

zoned_time(); | (1) | (C++20 起)
zoned_time(const std::chrono::sys_time<Duration>& st); | (2) | (C++20 起)
zoned_time(const zoned_time& other) = default; | (3) | (C++20 起)
template< class Duration2 > zoned_time(const std::chrono::zoned_time<Duration2, TimeZonePtr>& other); | (4) | (C++20 起)
explicit zoned_time(TimeZonePtr z); | (5) | (C++20 起)
explicit zoned_time(std::string_view name); | (6) | (C++20 起)
zoned_time(TimeZonePtr z, const std::chrono::sys_time<Duration>& st); | (7) | (C++20 起)
zoned_time(std::string_view name, const std::chrono::sys_time<Duration>& st); | (8) | (C++20 起)
zoned_time(TimeZonePtr z, const std::chrono::local_time<Duration>& tp); | (9) | (C++20 起)
zoned_time(std::string_view name, const std::chrono::local_time<Duration>& tp); | (10) | (C++20 起)
zoned_time(TimeZonePtr z, const std::chrono::local_time<Duration>& tp, std::chrono::choose c); | (11) | (C++20 起)
zoned_time(std::string_view name, const std::chrono::local_time<Duration>& tp, std::chrono::choose c); | (12) | (C++20 起)
template< class Duration2, class TimeZonePtr2 > zoned_time(TimeZonePtr z, const std::chrono::zoned_time<Duration2, TimeZonePtr2>& zt); | (13) | (C++20 起)
template< class Duration2, class TimeZonePtr2 > zoned_time(TimeZonePtr z, const std::chrono::zoned_time<Duration2, TimeZonePtr2>& zt, std::chrono::choose); | (14) | (C++20 起)
template< class Duration2, class TimeZonePtr2 > zoned_time(std::string_view name, const std::chrono::zoned_time<Duration2, TimeZonePtr2>& zt); | (15) | (C++20 起)
template< class Duration2, class TimeZonePtr2 > zoned_time(std::string_view name, const std::chrono::zoned_time<Duration2, TimeZonePtr2>& zt, std::chrono::choose); | (16) | (C++20 起)

构造 `zoned_time` 对象，按照下表初始化存储的时区指针和时间点，其中 `traits` 为 std::chrono::zoned_traits<TimeZonePtr> ：

重载 | 时区指针（记为 `zone` ） | 时间点（ std::chrono::sys_time<duration> ） | 注意
--- | --- | --- | ---
(1) | traits::default_zone() | 默认构造 | (a)
(2) | `st`
(3) | other.get_time_zone() | other.get_sys_time() | (b)
(4) | other.get_time_zone() | other.get_sys_time() | (e)
(5) | std::move(z) | 默认构造 |
(6) | traits::locate_zone(name) | (c)
(7) | std::move(z) | `st` |
(8) | traits::locate_zone(name) | (c)
(9) | std::move(z) | zone->to_sys(tp) | (d)
(10) | traits::locate_zone(name) | (c,d)
(11) | std::move(z) | zone->to_sys(tp, c) | (d)
(12) | traits::locate_zone(name) | (c,d)
(13-14) | std::move(z) | zt.get_sys_time() | (e)
(15-16) | traits::locate_zone(name) | (c,e)

a) 若 traits::default_zone() 非良式，则指定来调用该表达式的构造函数 (1-2) 不参与重载决议。
b) 若 std::is_copy_constructible_v<TimeZonePtr> 为 false 则定义默认化的复制构造函数 (3) 为被删除。
c) 若 traits::locate_zone(name) 非良式或若该表达式不可转换成 `TimeZonePtr` ，则带 std::string_view 参数 `name` 的构造函数 (6,8,10,12,15-16) 不参与重载决议。
d) 若 zone->to_sys 非良式或其结果不可转换成 std::chrono::sys_time<duration> ，则指定来调用该调用表达式的构造函数 (9-12) 不参与重载决议。
e) 若 `Duration2` 不可转换成 `Duration` ，则带模板形参 `Duration2` 的构造函数 (4,13-16) 不参与重载决议。

若（按上述方式初始化的）时区指针不指代合法时区，则行为未定义。

### 注解

`zoned_time` 无移动构造函数，而移动它的尝试将替而用默认化的复制构造函数 (3) 进行复制。从而当 `TimeZonePtr` 是仅移动的类型时， `zoned_time` 不可移动：既不能复制亦不能移动它。

构造函数 (14,16) 接受 std::chrono::choose 参数，但该参数无效果。