From 8fbeb9ac4f4157282594ae41b90127134702f586 Mon Sep 17 00:00:00 2001 From: Howard Hinnant Date: Mon, 11 Jun 2018 15:16:42 -0400 Subject: [PATCH] Document clock_cast for local_time. Document clock_time_conversion calling D::from_local and clock_time_conversion calling S::to_local. To avoid ambiguities addes: * clock_time_conversion - idenitity * clock_time_conversion - same as default (utc_clock::to_local) * clock_time_conversion - same as default (utc_clock::from_local) In addition, as std::chrono::system_clock cannot be edited, added: * clock_time_conversion - assumes same epoch * clock_time_conversion - assumes same epoch --- tz.html | 268 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 267 insertions(+), 1 deletion(-) diff --git a/tz.html b/tz.html index da51358..616502f 100644 --- a/tz.html +++ b/tz.html @@ -26,7 +26,7 @@

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