From 8fbeb9ac4f4157282594ae41b90127134702f586 Mon Sep 17 00:00:00 2001
From: Howard Hinnant
Howard E. Hinnant
-2018-06-02
+2018-06-11
Time Zone Database Parser
@@ -2690,6 +2690,16 @@ public:
static
utc_time<std::common_type_t<Duration, std::chrono::seconds>>
from_sys(const sys_time<Duration>&);
+
+ template <class Duration>
+ static
+ local_time<std::common_type_t<Duration, std::chrono::seconds>>
+ to_local(const utc_time<Duration>&);
+
+ template <class Duration>
+ static
+ utc_time<std::common_type_t<Duration, std::chrono::seconds>>
+ from_local(const local_time<Duration>&);
};
template <class Duration>
@@ -2756,6 +2766,30 @@ second insertion), then the conversion counts that leap second as inserted.
+template <class Duration> +static +local_time<std::common_type_t<Duration, std::chrono::seconds>> +utc_clock::to_local(const utc_time<Duration>& u); ++
++ ++Returns:
+local_time<Duration>{to_sys(u).time_since_epoch()}
. +
+template <class Duration> +static +utc_time<std::common_type_t<Duration, std::chrono::seconds>> +utc_clock::from_local(const local_time<Duration>& t); ++
+++Returns:
+from_sys(sys_time<Duration>{t.time_since_epoch()})
. +
template <class CharT, class Traits, class Duration> std::basic_ostream<class CharT, class Traits>& @@ -2896,6 +2930,16 @@ public: static tai_time<std::common_type_t<Duration, std::chrono::seconds>> from_utc(const utc_time<Duration>&) noexcept; + + template <class Duration> + static + local_time<std::common_type_t<Duration, std::chrono::seconds>> + to_local(const tai_time<Duration>&) noexcept; + + template <class Duration> + static + tai_time<std::common_type_t<Duration, std::chrono::seconds>> + from_local(const local_time<Duration>&) noexcept; }; template <class Duration> @@ -2958,6 +3002,32 @@ tai_clock::from_utc(const utc_time<Duration>& t) noexcept; ++template <class Duration> +static +local_time<std::common_type_t<Duration, std::chrono::seconds>> +tai_clock::to_local(const tai_time<Duration>& t) noexcept; ++++ ++Returns:
+local_time<Duration>{t.time_since_epoch()} - + (local_days{1970_y/January/1} - local_days{1958_y/January/1})
. ++template <class Duration> +static +tai_time<std::common_type_t<Duration, std::chrono::seconds>> +tai_clock::from_local(const local_time<Duration>& t) noexcept; +++++Returns:
+tai_time<Duration>{t.time_since_epoch()} + + (local_days{1970_y/January/1} - local_days{1958_y/January/1})
. +template <class CharT, class Traits, class Duration> std::basic_ostream<class CharT, class Traits>& @@ -3041,6 +3111,16 @@ public: static gps_time<std::common_type_t<Duration, std::chrono::seconds>> from_utc(const utc_time<Duration>&) noexcept; + + template <class Duration> + static + local_time<std::common_type_t<Duration, std::chrono::seconds>> + to_local(const gps_time<Duration>&) noexcept; + + template <class Duration> + static + gps_time<std::common_type_t<Duration, std::chrono::seconds>> + from_local(const local_time<Duration>&) noexcept; }; template <class Duration> @@ -3102,6 +3182,32 @@ gps_clock::from_utc(const utc_time<Duration>& t) noexcept; ++template <class Duration> +static +local_time<std::common_type_t<Duration, std::chrono::seconds>> +gps_clock::to_local(const gps_time<Duration>& t) noexcept; ++++ ++Returns:
+local_time<Duration>{t.time_since_epoch()} + + (local_days{1980_y/January/Sunday[1]} - local_days{1970_y/January/1})
. ++template <class Duration> +static +gps_time<std::common_type_t<Duration, std::chrono::seconds>> +gps_clock::from_local(const local_time<Duration>& t) noexcept; +++++Returns:
+local_time<Duration>{t.time_since_epoch()} - + (local_days{1980_y/January/Sunday[1]} - local_days{1970_y/January/1})
. +template <class CharT, class Traits, class Duration> std::basic_ostream<class CharT, class Traits>& @@ -3312,6 +3418,26 @@ operator()(const utc_time<Duration>& t) const; ++template <> +struct clock_time_conversion<local_t, local_t> +{ + template <class Duration> + local_time<Duration> + operator()(const local_time<Duration>& t) const; +}; + +template <class Duration> +local_time<Duration> +operator()(const local_time<Duration>& t) const; ++ ++++Returns:
+t
. +// system_clock <-> utc_clock@@ -3356,6 +3482,94 @@ operator()(const utc_time<Duration>& t) const; ++// system_clock <-> local_t ++ ++template <> +struct clock_time_conversion<local_t, std::chrono::system_clock> +{ + template <class Duration> + local_time<std::common_type_t<Duration, std::chrono::seconds>> + operator()(const sys_time<Duration>& t) const; +}; + +template <class Duration> +local_time<std::common_type_t<Duration, std::chrono::seconds>> +operator()(const sys_time<Duration>& t) const; ++ +++ ++Returns:
+local_time<Duration>{t.time_since_epoch()}
. ++template <> +struct clock_time_conversion<std::chrono::system_clock, local_t> +{ + template <class Duration> + sys_time<std::common_type_t<Duration, std::chrono::seconds>> + operator()(const local_t<Duration>& t) const; +}; + +template <class Duration> +sys_time<std::common_type_t<Duration, std::chrono::seconds>> +operator()(const local_t<Duration>& t) const; ++ +++ ++Returns:
+sys_time<Duration>{t.time_since_epoch()}
. ++// utc_clock <-> local_t ++ ++template <> +struct clock_time_conversion<local_t, utc_clock> +{ + template <class Duration> + local_time<std::common_type_t<Duration, std::chrono::seconds>> + operator()(const utc_time<Duration>& t) const; +}; + +template <class Duration> +local_time<std::common_type_t<Duration, std::chrono::seconds>> +operator()(const utc_time<Duration>& t) const; ++ +++ ++Returns:
+utc_clock::to_local(t)
. ++template <> +struct clock_time_conversion<utc_clock, local_t> +{ + template <class Duration> + utc_time<std::common_type_t<Duration, std::chrono::seconds>> + operator()(const local_t<Duration>& t) const; +}; + +template <class Duration> +utc_time<std::common_type_t<Duration, std::chrono::seconds>> +operator()(const local_t<Duration>& t) const; ++ ++++Returns:
+utc_clock::from_local(t)
. +// Clock <-> system_clock@@ -3477,6 +3691,58 @@ operator()(const utc_time<Duration>& t) const ++// Clock <-> local_t ++ ++template <class SourceClock> +struct clock_time_conversion<local_t, SourceClock> +{ + template <class Duration> + auto + operator()(const std::chrono::time_point<SourceClock, Duration>& t) const + -> decltype(SourceClock::to_local(t)); +}; + +template <class Duration> +auto +operator()(const std::chrono::time_point<SourceClock, Duration>& t) const + -> decltype(SourceClock::to_local(t)); ++ +++ ++Remarks: This function does not participate in overload resolution unless +
+SourceClock::to_local(t)
is well formed. If +SourceClock::to_local(t)
does not return +local_time<some duration>
the program is ill-formed. ++Returns:
+SourceClock::to_local(t)
. ++template <class Duration> +auto +operator()(const local_time<Duration>& t) const + -> decltype(DestClock::from_local(t)); ++ ++++Remarks: This function does not participate in overload resolution unless +
+DestClock::from_local(t)
is well formed. If +DestClock::from_local(t)
does not return +time_point<DestClock, some duration>
the program is ill-formed. +. +
+Returns:
+DestClock::from_local(t)
. +// clock_cast