4.2 KiB
[time.zone.zonedtime.overview]
30 Time library [time]
30.11 Time zones [time.zone]
30.11.7 Class template zoned_time [time.zone.zonedtime]
30.11.7.1 Overview [time.zone.zonedtime.overview]
namespace std::chrono {template<class Duration, class TimeZonePtr = const time_zone*>class zoned_time {public:using duration = common_type_t<Duration, seconds>; private: TimeZonePtr zone_; // exposition only sys_time tp_; // exposition onlyusing traits = zoned_traits; // exposition onlypublic: zoned_time(); zoned_time(const zoned_time&) = default; zoned_time& operator=(const zoned_time&) = default;
zoned_time(const sys_time& st); explicit zoned_time(TimeZonePtr z); explicit zoned_time(string_view name); template zoned_time(const zoned_time<Duration2, TimeZonePtr>& y);
zoned_time(TimeZonePtr z, const sys_time& st); zoned_time(string_view name, const sys_time& st);
zoned_time(TimeZonePtr z, const local_time& tp); zoned_time(string_view name, const local_time& tp); zoned_time(TimeZonePtr z, const local_time& tp, choose c); zoned_time(string_view name, const local_time& tp, choose c); template<class Duration2, class TimeZonePtr2> zoned_time(TimeZonePtr z, const zoned_time<Duration2, TimeZonePtr2>& y); template<class Duration2, class TimeZonePtr2> zoned_time(TimeZonePtr z, const zoned_time<Duration2, TimeZonePtr2>& y, choose); template<class Duration2, class TimeZonePtr2> zoned_time(string_view name, const zoned_time<Duration2, TimeZonePtr2>& y); template<class Duration2, class TimeZonePtr2> zoned_time(string_view name, const zoned_time<Duration2, TimeZonePtr2>& y, choose c);
zoned_time& operator=(const sys_time& st); zoned_time& operator=(const local_time& lt); operator sys_time() const; explicit operator local_time() const;
TimeZonePtr get_time_zone() const; local_time get_local_time() const; sys_time get_sys_time() const; sys_info get_info() const; };
zoned_time() -> zoned_time; template zoned_time(sys_time)-> zoned_time<common_type_t<Duration, seconds>>; templateusing time-zone-representation = // exposition only conditional_t<is_convertible_v<TimeZonePtrOrName, string_view>, const time_zone*, remove_cvref_t>; template zoned_time(TimeZonePtrOrName&&)-> zoned_time<seconds, time-zone-representation>; template<class TimeZonePtrOrName, class Duration> zoned_time(TimeZonePtrOrName&&, sys_time)-> zoned_time<common_type_t<Duration, seconds>, time-zone-representation>; template<class TimeZonePtrOrName, class Duration> zoned_time(TimeZonePtrOrName&&, local_time, choose = choose::earliest)-> zoned_time<common_type_t<Duration, seconds>, time-zone-representation>; template<class Duration, class TimeZonePtrOrName, class TimeZonePtr2> zoned_time(TimeZonePtrOrName&&, zoned_time<Duration, TimeZonePtr2>, choose = choose::earliest)-> zoned_time<common_type_t<Duration, seconds>, time-zone-representation>;}
zoned_time represents a logical pairing of a time_zone and a time_point with precision Duration.
zoned_time maintains the invariant that it always refers to a valid time zone and represents a point in time that exists and is not ambiguous in that time zone.
If Duration is not a specialization of chrono::duration, the program is ill-formed.
Every constructor of zoned_time that accepts a string_view as its first parameter does not participate in class template argument deduction ([over.match.class.deduct]).