|
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
zoned_time::zoned_time | ||||
| Nonmember functions | ||||
| Helper classes | ||||
| Deduction guides |
zoned_time(); | (1) | (since C++20) |
zoned_time(conststd::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(conststd::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,conststd::chrono::sys_time<Duration>& st); | (7) | (since C++20) |
zoned_time(std::string_view name,conststd::chrono::sys_time<Duration>& st); | (8) | (since C++20) |
zoned_time( TimeZonePtr z,conststd::chrono::local_time<Duration>& tp); | (9) | (since C++20) |
zoned_time(std::string_view name,conststd::chrono::local_time<Duration>& tp); | (10) | (since C++20) |
zoned_time( TimeZonePtr z,conststd::chrono::local_time<Duration>& tp, std::chrono::choose c); | (11) | (since C++20) |
zoned_time(std::string_view name, conststd::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 azoned_time object, initializing the stored time zone pointer and time point according to the following table, wheretraits isstd::chrono::zoned_traits<TimeZonePtr>:
| Overload | Time zone pointer (denotedzone) | Time point (astd::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 iftraits::locate_zone(name) is not well-formed or if that expression is not convertible toTimeZonePtr.Duration2(4,13-16) do not participate in overload resolution ifDuration2 is not convertible toDuration.The behavior is undefined if the time zone pointer (initialized as described above) does not refer to a time zone.
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, whenTimeZonePtr is a move-only type,zoned_time is immovable: it can be neither moved nor copied.
The constructors(14,16) accept astd::chrono::choose parameter, but that parameter has no effect.
#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"; constexprstd::string_view location1{"America/Phoenix"sv};std::cout<<std::chrono::zoned_time{location1}<<" : "<< location1<<'\n'; conststd::chrono::time_zone* timeZonePtr=std::chrono::locate_zone("UTC");std::cout<<std::chrono::zoned_time{timeZonePtr}<<" : UTC time zone\n"; constexprauto location2{"Europe/Rome"sv};std::cout<<std::chrono::zoned_time{location2,std::chrono::local_days{2021y/12/31}}<<" : "<< location2<<'\n'; constexprauto location3{"Europe/Rome"sv};constexprauto some_date=std::chrono::sys_time<std::chrono::days>{2021y/12/31};std::cout<<std::chrono::zoned_time{location3, some_date}<<" : "<< location3<<'\n'; constauto now=std::chrono::floor<std::chrono::minutes>(std::chrono::system_clock::now());constexprauto location4{"Europe/Rome"sv};std::cout<<std::chrono::zoned_time{location4, now}<<" : "<< location4<<'\n'; constexprauto NewYork{"America/New_York"sv};constexprauto Tokyo{"Asia/Tokyo"sv};conststd::chrono::zoned_time tz_Tokyo{Tokyo, now};conststd::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 : default1969-12-31 17:00:00 MST : America/Phoenix1970-01-01 00:00:00 UTC : UTC time zone2021-12-31 00:00:00 CET : Europe/Rome2021-12-31 01:00:00 CET : Europe/Rome2021-09-20 23:04:00 CEST : Europe/Rome2021-09-21 06:04:00 JST : Asia/Tokyo2021-09-20 17:04:00 EDT : America/New_York