From 4f89141e565ef7d95bbc32eefd14af50512a3442 Mon Sep 17 00:00:00 2001 From: Howard Hinnant Date: Sat, 25 Feb 2017 20:45:16 -0500 Subject: [PATCH] Rewrite format and parse in terms of detail::fields * Add format and parse to utc_time. * Added more tests. --- date.html | 69 +++++++++++++++++++++++++++++++++++++++++++++++ tz.html | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 142 insertions(+), 7 deletions(-) diff --git a/date.html b/date.html index fe73905..b679dc7 100644 --- a/date.html +++ b/date.html @@ -6326,6 +6326,7 @@ time_of_day<std::chrono::hours> public: using precision = std::chrono::hours; + constexpr time_of_day() noexcept; constexpr explicit time_of_day(std::chrono::hours since_midnight) noexcept; constexpr std::chrono::hours hours() const noexcept; @@ -6339,6 +6340,21 @@ public: }; +
+constexpr time_of_day<std::chrono::hours>::time_of_day() noexcept;
+
+ +
+

+Effects: Constructs an object of type time_of_day in 24-hour format +corresponding to 00:00:00 hours after 00:00:00. +

+

+Postconditions: hours() returns 0h. +mode() returns 0. +

+
+
 constexpr explicit time_of_day<std::chrono::hours>::time_of_day(std::chrono::hours since_midnight) noexcept;
 
@@ -6453,6 +6469,7 @@ time_of_day<std::chrono::minutes> public: using precision = std::chrono::minutes; + constexpr time_of_day() noexcept; constexpr explicit time_of_day(std::chrono::minutes since_midnight) noexcept; constexpr std::chrono::hours hours() const noexcept; @@ -6467,6 +6484,21 @@ public: }; +
+constexpr time_of_day<std::chrono::minutes>::time_of_day() noexcept;
+
+ +
+

+Effects: Constructs an object of type time_of_day in 24-hour format +corresponding to 0 minutes after 00:00:00. +

+

+Postconditions: hours() returns 0h. +minutes() returns 0min. mode() returns 0. +

+
+
 constexpr explicit time_of_day<std::chrono::minutes>::time_of_day(std::chrono::minutes since_midnight) noexcept;
 
@@ -6593,6 +6625,7 @@ time_of_day<std::chrono::seconds> public: using precision = std::chrono::seconds; + constexpr time_of_day() noexcept; constexpr explicit time_of_day(std::chrono::seconds since_midnight) noexcept; constexpr std::chrono::hours hours() const noexcept; @@ -6608,6 +6641,22 @@ public: }; +
+constexpr time_of_day<std::chrono::seconds>::time_of_day() noexcept;
+
+ +
+

+Effects: Constructs an object of type time_of_day in 24-hour format +corresponding to 0 seconds after 00:00:00. +

+

+Postconditions: hours() returns 0h. +minutes() returns 0min. seconds() returns +0s. mode() returns 0. +

+
+
 constexpr explicit time_of_day<std::chrono::seconds>::time_of_day(std::chrono::seconds since_midnight) noexcept;
 
@@ -6746,6 +6795,7 @@ time_of_day<std::chrono::duration<Rep, Period>> public: using precision = The decimal-based duration used to format + constexpr time_of_day() noexcept; constexpr explicit time_of_day(std::chrono::duration<Rep, Period> since_midnight) noexcept; constexpr std::chrono::hours hours() const noexcept; @@ -6766,6 +6816,25 @@ public: This specialization shall not exist unless Period < 1s.

+
+constexpr 
+time_of_day<std::chrono::duration<Rep, Period>>::time_of_day() noexcept;
+
+ +
+

+Effects: Constructs an object of type time_of_day in 24-hour format +corresponding to 0 fractional seconds after 00:00:00. +

+

+Postconditions: hours() returns 0h. +minutes() returns 0min. +seconds() returns 0s. +subseconds() returns 0 fractional precision seconds. +mode() returns 0. +

+
+
 constexpr explicit 
 time_of_day<std::chrono::duration<Rep, Period>>::time_of_day(std::chrono::duration<Rep, Period> since_midnight) noexcept;
diff --git a/tz.html b/tz.html
index 5f99326..71800d1 100644
--- a/tz.html
+++ b/tz.html
@@ -26,7 +26,7 @@
 

Howard E. Hinnant
-2017-01-28
+2017-02-25

Time Zone Database Parser

@@ -2001,8 +2001,6 @@ void to_stream(std::basic_ostream<CharT, Traits>& os, const CharT* fmt, const std::chrono::duration<Rep, Period>& d);
-
-
 template <class CharT, class Traits, class Duration>
@@ -2010,8 +2008,6 @@ void
 to_stream(std::basic_ostream<CharT, Traits>& os, const CharT* fmt,
           const local_time<Duration>& tp);
 
-
-
 template <class CharT, class Traits, class Duration>
@@ -2019,8 +2015,6 @@ void
 to_stream(std::basic_ostream<CharT, Traits>& os, const CharT* fmt,
           const sys_time<Duration>& tp);
 
-
-
 template <class CharT, class Traits, class Duration>
@@ -2028,6 +2022,14 @@ void
 to_stream(std::basic_ostream<CharT, Traits>& os, const CharT* fmt,
           const zoned_time<Duration>& tp);
 
+ +
+template <class CharT, class Traits, class Duration>
+void
+to_stream(std::basic_ostream<CharT, Traits>& os, const CharT* fmt,
+          const utc_time<Duration>& tp);
+
+

These are lower-level functions with respect to format. These functions @@ -2071,6 +2073,15 @@ template <class CharT, class Traits, class Duration> std::basic_string<class CharT, class Traits> format(const std::basic_string<class CharT, class Traits>& format, const sys_time<Duration>& tp); +template <class CharT, class Traits, class Duration> +std::basic_string<class CharT, class Traits> +format(const std::locale& loc, const std::basic_string<class CharT, class Traits>& format, + const utc_time<Duration>& tp); + +template <class CharT, class Traits, class Duration> +std::basic_string<class CharT, class Traits> +format(const std::basic_string<class CharT, class Traits>& format, const utc_time<Duration>& tp); + template <class CharT, class Traits, class Rep, class Period> std::basic_string<CharT> format(const std::basic_string<CharT, Traits>& fmt, const std::chrono::duration<Rep, Period>& d); @@ -2101,6 +2112,14 @@ template <class CharT, class Duration> std::basic_string<class CharT> format(const CharT* format, const sys_time<Duration>& tp); +template <class CharT, class Duration> +std::basic_string<class CharT> +format(const std::locale& loc, const CharT* format, const utc_time<Duration>& tp); + +template <class CharT, class Duration> +std::basic_string<class CharT> +format(const CharT* format, const utc_time<Duration>& tp); + template <class CharT, class Rep, class Period> std::basic_string<CharT> format(const CharT* fmt, const std::chrono::duration<Rep, Period>& d) @@ -2254,6 +2273,30 @@ template <class Duration, class CharT, class Traits> parse(const std::basic_string<CharT, Traits>& format, local_time<Duration>& tp, std::chrono::minutes& offset, std::basic_string<CharT, Traits>& abbrev); +template <class Duration, class CharT, class Traits> +unspecified istream manipulator +parse(const std::basic_string<CharT, Traits>& format, utc_time<Duration>& tp); + +template <class Duration, class CharT, class Traits> +unspecified istream manipulator +parse(const std::basic_string<CharT, Traits>& format, utc_time<Duration>& tp, + std::basic_string<CharT, Traits>& abbrev); + +template <class Duration, class CharT, class Traits> +unspecified istream manipulator +parse(const std::basic_string<CharT, Traits>& format, utc_time<Duration>& tp, + std::chrono::minutes& offset); + +template <class Duration, class CharT, class Traits> +unspecified istream manipulator +parse(const std::basic_string<CharT, Traits>& format, utc_time<Duration>& tp, + std::basic_string<CharT, Traits>& abbrev, std::chrono::minutes& offset); + +template <class Duration, class CharT, class Traits> +unspecified istream manipulator +parse(const std::basic_string<CharT, Traits>& format, utc_time<Duration>& tp, + std::chrono::minutes& offset, std::basic_string<CharT, Traits>& abbrev); + template <class Rep, class Period, class CharT, class Traits> unspecified istream manipulator parse(const std::basic_string<CharT, Traits>& format, @@ -2307,6 +2350,29 @@ template <class Duration, class CharT, class Traits> parse(const CharT* format, local_time<Duration>& tp, std::chrono::minutes& offset, std::basic_string<CharT, Traits>& abbrev); +template <class Duration, class CharT> +unspecified istream manipulator +parse(const CharT* format, utc_time<Duration>& tp); + +template <class Duration, class CharT, class Traits> +unspecified istream manipulator +parse(const CharT* format, utc_time<Duration>& tp, + std::basic_string<CharT, Traits>& abbrev); + +template <class Duration, class CharT> +unspecified istream manipulator +parse(const CharT* format, utc_time<Duration>& tp, std::chrono::minutes& offset); + +template <class Duration, class CharT, class Traits> +unspecified istream manipulator +parse(const CharT* format, utc_time<Duration>& tp, + std::basic_string<CharT, Traits>& abbrev, std::chrono::minutes& offset); + +template <class Duration, class CharT, class Traits> +unspecified istream manipulator +parse(const CharT* format, utc_time<Duration>& tp, + std::chrono::minutes& offset, std::basic_string<CharT, Traits>& abbrev); + template <class Rep, class Period, class CharT> unspecified istream manipulator parse(const CharT* format, std::chrono::duration<Rep, Period>& d);