std::chrono::zoned_time<Duration,TimeZonePtr>::zoned_time
zoned_time(); |
(1) | (since C++20) |
zoned_time( const std::chrono::sys_time<Duration>& st ); |
(2) | (since C++20) |
zoned_time( const zoned_time& other) = default; |
(3) | (since C++20) |
template< class Duration2 > zoned_time( const std::chrono::zoned_time<Duration2, TimeZonePtr>& other ); |
(4) | (since C++20) |
explicit zoned_time( TimeZonePtr z ); |
(5) | (since C++20) |
explicit zoned_time( std::string_view name ); |
(6) | (since C++20) |
zoned_time( TimeZonePtr z, const std::chrono::sys_time<Duration>& st ); |
(7) | (since C++20) |
zoned_time( std::string_view name, const std::chrono::sys_time<Duration>& st ); |
(8) | (since C++20) |
zoned_time( TimeZonePtr z, const std::chrono::local_time<Duration>& tp ); |
(9) | (since C++20) |
zoned_time( std::string_view name, const std::chrono::local_time<Duration>& tp ); |
(10) | (since C++20) |
zoned_time( TimeZonePtr z, const std::chrono::local_time<Duration>& tp, std::chrono::choose c ); |
(11) | (since C++20) |
zoned_time( std::string_view name, const std::chrono::local_time<Duration>& tp, std::chrono::choose c ); |
(12) | (since C++20) |
template< class Duration2, class TimeZonePtr2 > zoned_time( TimeZonePtr z, |
(13) | (since C++20) |
template< class Duration2, class TimeZonePtr2 > zoned_time( TimeZonePtr z, |
(14) | (since C++20) |
template< class Duration2, class TimeZonePtr2 > zoned_time( std::string_view name, |
(15) | (since C++20) |
template< class Duration2, class TimeZonePtr2 > zoned_time( std::string_view name, |
(16) | (since C++20) |
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.
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.
Example
#include <chrono> #include <iostream> #include <string_view> int main() { using std::chrono_literals::operator""y; using std::operator""sv; const auto now = std::chrono::floor<std::chrono::minutes>(std::chrono::system_clock::now()); { std::cout << std::chrono::zoned_time{} << " : default\n"; } { constexpr std::string_view location {"America/Phoenix"sv}; std::cout << std::chrono::zoned_time{ location } << " : " << location << '\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 location{"Europe/Rome"sv}; std::cout << std::chrono::zoned_time{ location, std::chrono::local_days{2021y/12/31} } << " : " << location << '\n'; } { constexpr auto location {"Europe/Rome"sv}; constexpr auto some_date = std::chrono::sys_time<std::chrono::days>{2021y/12/31}; std::cout << std::chrono::zoned_time{ location, some_date } << " : " << location << '\n'; } { constexpr auto location {"Europe/Rome"sv}; std::cout << std::chrono::zoned_time{ location, now } << " : " << location << '\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