[time.zone.zonedtime.overview]

# 30 Time library [[time]](./#time)

## 30.11 Time zones [[time.zone]](time.zone#zonedtime.overview)

### 30.11.7 Class template zoned_time [[time.zone.zonedtime]](time.zone.zonedtime#overview)

#### 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<duration> tp_; // *exposition only*using traits = zoned_traits<TimeZonePtr>; // *exposition only*public: zoned_time();
 zoned_time(const zoned_time&) = default;
 zoned_time& operator=(const zoned_time&) = default;

 zoned_time(const sys_time<Duration>& st); explicit zoned_time(TimeZonePtr z); explicit zoned_time(string_view name); template<class Duration2> zoned_time(const zoned_time<Duration2, TimeZonePtr>& y);

 zoned_time(TimeZonePtr z, const sys_time<Duration>& st);
 zoned_time(string_view name, const sys_time<Duration>& st);

 zoned_time(TimeZonePtr z, const local_time<Duration>& tp);
 zoned_time(string_view name, const local_time<Duration>& tp);
 zoned_time(TimeZonePtr z, const local_time<Duration>& tp, choose c);
 zoned_time(string_view name, const local_time<Duration>& 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<Duration>& st);
 zoned_time& operator=(const local_time<Duration>& lt); operator sys_time<duration>() const; explicit operator local_time<duration>() const;

 TimeZonePtr get_time_zone() const;
 local_time<duration> get_local_time() const;
 sys_time<duration> get_sys_time() const;
 sys_info get_info() const; };

 zoned_time() -> zoned_time<seconds>; template<class Duration> zoned_time(sys_time<Duration>)-> zoned_time<common_type_t<Duration, seconds>>; template<class TimeZonePtrOrName>using *time-zone-representation* = // *exposition only* conditional_t<is_convertible_v<TimeZonePtrOrName, string_view>, const time_zone*,
 remove_cvref_t<TimeZonePtrOrName>>; template<class TimeZonePtrOrName> zoned_time(TimeZonePtrOrName&&)-> zoned_time<seconds, *time-zone-representation*<TimeZonePtrOrName>>; template<class TimeZonePtrOrName, class Duration> zoned_time(TimeZonePtrOrName&&, sys_time<Duration>)-> zoned_time<common_type_t<Duration, seconds>, *time-zone-representation*<TimeZonePtrOrName>>; template<class TimeZonePtrOrName, class Duration> zoned_time(TimeZonePtrOrName&&, local_time<Duration>,
 choose = choose::earliest)-> zoned_time<common_type_t<Duration, seconds>, *time-zone-representation*<TimeZonePtrOrName>>; 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*<TimeZonePtrOrName>>;}

[1](#1)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L9701)

zoned_time represents a logical pairing of
a time_zone and a time_point with precision Duration[.](#1.sentence-1)

zoned_time<Duration> 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[.](#1.sentence-2)

[2](#2)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L9709)

If Duration is not a specialization of chrono​::​duration,
the program is ill-formed[.](#2.sentence-1)

[3](#3)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L9713)

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]](over.match.class.deduct "12.2.2.9 Class template argument deduction"))[.](#3.sentence-1)
