std::chrono::zoned_time<Duration,TimeZonePtr>::zoned_time
zoned_time( const std::chrono::zoned_time <Duration2, TimeZonePtr>& other );
std::chrono::choose c );
const std::chrono::local_time <Duration>& tp, std::chrono::choose c );
zoned_time( TimeZonePtr z,
zoned_time( TimeZonePtr z,
const std::chrono::zoned_time <Duration2, TimeZonePtr2>& zt,
zoned_time( std::string_view name,
zoned_time( std::string_view name,
const std::chrono::zoned_time <Duration2, TimeZonePtr2>& zt,
Constructs a zoned_time object, initializing the stored time zone pointer and time point according to the following table, where traits is std::chrono::zoned_traits <TimeZonePtr>:
| Overload | Time zone pointer (denoted zone)
|
Time point (a std::chrono::sys_time <duration>) | Notes |
|---|---|---|---|
| (1) | traits::default_zone() | default constructed | (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) | default constructed | |
| (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) |
name (6,8,10,12,15,16) do not participate in overload resolution if traits::locate_zone(name) is not well-formed or if that expression is not convertible to TimeZonePtr.Duration2 (4,13-16) do not participate in overload resolution if Duration2 is not convertible to Duration.The behavior is undefined if the time zone pointer (initialized as described above) does not refer to a time zone.
[edit] Notes
zoned_time does not have a move constructor and attempting to move one will perform a copy instead using the defaulted copy constructor (3). Thus, when TimeZonePtr is a move-only type, zoned_time is immovable: it can be neither moved nor copied.
The constructors (14,16) accept a std::chrono::choose parameter, but that parameter has no effect.
[edit] Example
#include <chrono> #include <iostream> #include <string_view> int main() { using std::chrono_literals::operator""y; using std::operator""sv; std::cout << std::chrono::zoned_time {} << " : default\n"; constexpr std::string_view location1{"America/Phoenix"sv}; std::cout << std::chrono::zoned_time {location1} << " : " << location1 << '\n'; const std::chrono::time_zone * timeZonePtr = std::chrono::locate_zone ("UTC"); std::cout << std::chrono::zoned_time {timeZonePtr} << " : UTC time zone\n"; constexpr auto location2{"Europe/Rome"sv}; std::cout << std::chrono::zoned_time {location2, std::chrono::local_days {2021y/12/31}} << " : " << location2 << '\n'; constexpr auto location3{"Europe/Rome"sv}; constexpr auto some_date = std::chrono::sys_time <std::chrono::days >{2021y/12/31}; std::cout << std::chrono::zoned_time {location3, some_date} << " : " << location3 << '\n'; const auto now = std::chrono::floor <std::chrono::minutes >(std::chrono::system_clock::now ()); constexpr auto location4{"Europe/Rome"sv}; std::cout << std::chrono::zoned_time {location4, now} << " : " << location4 << '\n'; constexpr auto NewYork{"America/New_York"sv}; constexpr auto Tokyo{"Asia/Tokyo"sv}; const std::chrono::zoned_time tz_Tokyo{Tokyo, now}; const std::chrono::zoned_time tz_NewYork{NewYork, now}; std::cout << std::chrono::zoned_time {Tokyo, tz_NewYork} << " : " << Tokyo << '\n'; std::cout << std::chrono::zoned_time {NewYork, tz_Tokyo} << " : " << NewYork << '\n'; }
Possible output:
1970年01月01日 00:00:00 UTC : default 1969年12月31日 17:00:00 MST : America/Phoenix 1970年01月01日 00:00:00 UTC : UTC time zone 2021年12月31日 00:00:00 CET : Europe/Rome 2021年12月31日 01:00:00 CET : Europe/Rome 2021年09月20日 23:04:00 CEST : Europe/Rome 2021年09月21日 06:04:00 JST : Asia/Tokyo 2021年09月20日 17:04:00 EDT : America/New_York