* There has been a great deal of anguish over the encoding of
weekdays: whether [0, 6] maps to [Sunday, Saturday] or
[1, 7] maps to [Monday, Sunday]. This commit attempts
to address that issue, but will break a small amount of
code at compile-time. See below on how to fix that.
* The weekday constructor used to accept [0, 6] to represent
[Sunday, Saturday]. It now accepts [0, 7] to represent
[Sunday, Saturday] with both 0 and 7 mapping to Sunday.
* The conversion from weekday to unsigned has been removed.
* To convert a weekday to unsigned replace:
auto u = unsigned{wd};
with:
auto u = (wd - Sunday).count();
This maps [Sunday, Saturday] to [0, 6], which is the
C/POSIX mapping. If you prefer the ISO mapping
([Monday, Sunday] -> [1, 7]), then do:
auto u = (wd - Monday).count() + 1;
* The bulk of the description is moved from tz.html to date.html.
* The format and parse flags are now described in detail, instead of
implicitly relying on the C and POSIX specs. This gives me room
to specify a few corner cases that are either under-specified in
the official specs, or to add extensions.
* The from_stream / to_stream specifications are now located with
each specific type that implements them. This allows more detailed
documentation as to how each type interacts with the from_stream /
to_stream system.
* The format and parse functions are now more clearly separated from
to_stream and from_stream, and are documented to be nothing more
than syntax sugar on top of any type that choses to implement
to_stream or from_stream.
* Many of the ideas and some of the code herein is credited to
Adrian Colomitchi
* Decouple fractional decimal seconds formatting from time_of_day
formatting so that it can be more easily used elsewhere in the
future.
* Include super-second durations such as nanocenturies and
microfortnights in the class of durations that will get formatted
with fractional decimal seconds.
* If a duration is exactly representable with fractional decimal
seconds not exceeding 18 decimal fractional digits, format it
exactly. Otherwise format it to 6 fractional decimal digits
(microseconds precision). The number 18 is chosen as this is the
limit of std::ratio using 64 bits (i.e. atto).
* The above bullet implies that durations with ratio<1, 4> will now
be formatted with 2 fractional decimal digits instead of 1.
ratio<1, 8> will be formatted with 3, and ratio<1, 3> with 6.
* Unify the implementation into one C++11 implementation that works
equally well with C++14.
* Drive-by fix a couple formatting bugs dealing with negative
durations.
* Deprecate the make_time functions taking unsigned md by removing
their documentation. Also deprecate the corresponding time_of_day
constructors taking unsigned md.
* This change paves the way for future formatting improvements.
Moved formatting and parsing of sys_time and local_time from tz.h to
date.h in order to make this functionality available to a wider
audience. Existing code does not need to change. But future code
can #include "date.h" instead of "tz.h" and need not compile tz.cpp nor
link to curl.
Formatting zoned_time remains in tz.h.