143 Commits

Author SHA1 Message Date
Andre Nguyen
7990eae740 fix user defined literals for compatibility with msvc 18 2020-08-21 17:09:47 -04:00
Howard Hinnant
569b2d6785 Improve error message while parsing posix timezone string 2020-08-02 10:56:37 -04:00
Howard Hinnant
6952fb50a6 Correct the value for not_a_year 2020-07-08 14:20:31 -04:00
Howard Hinnant
fe2f9c7eac Change constexpr to CONSTDATA 2020-07-07 15:01:45 -04:00
Howard Hinnant
d544e5af25 Throw exception if zoned_time is constructed with nullptr 2020-06-14 19:30:23 -04:00
Howard Hinnant
cac99da8dc For traits in constexpr context use ::value
* Fixes #542
2020-06-02 21:08:57 -04:00
Howard Hinnant
9343e31599 Give Posix::time_zone equality comparison 2020-05-24 21:31:18 -04:00
Howard Hinnant
f43c39fcf1 Add member function name() const to Posix::time_zone
* Returns the minimal string that uniquely identifies this
  time_zone.  That is, it takes advantage of all defaults.
2020-05-06 22:12:15 -04:00
Howard Hinnant
e12095f26f Revert change for floating point reps in decimal_format_seconds 2020-04-18 09:24:53 -04:00
Howard Hinnant
7d811743e0 Fix parse of second offset in posix time zone 2020-04-18 09:24:22 -04:00
Howard Hinnant
a2fdba1adc __GNUC_MINOR -> __GNUC_MINOR__
* Fixes #560
2020-03-30 12:50:37 -04:00
Howard Hinnant
4c1968b8f0 Fix constexpr overflow problems on gcc-7-9 2020-03-08 21:58:56 -04:00
Asad. Gharighi
9cc3a7bca1 Adding Persian/Jalali/Solar-Hijri calendar 2020-03-08 20:18:45 -04:00
Nexus Web Development
9502bc27a3 Update Date.h (#529)
* Remove arithmetic overflow: 

Using operator '-' on a 4 byte value and then casting the result to a 8 byte value. Casting the value to the wider type before calling operator '-' to avoid overflow.
2020-01-11 15:24:10 -05:00
nanoric
66a5aa482e Add constexpr for clock_cast. 2020-01-11 14:44:06 -05:00
Howard Hinnant
a184309786 Fix unwanted localization of integral grouping
* Fixes #525
2020-01-01 11:12:14 -05:00
johnmph
48433b9892 Update date.h (#518)
using decltype in day constructor to be consistent with month and year
2019-12-05 14:00:16 -05:00
Nehal J Wani
4c95165298 Constrain make_zoned for icc16
Build fails with Intel Compiler v16:

<source>(1698): error: expression must have a constant value
  std::is_class<typename std::decay<decltype(*std::declval<TimeZonePtr&>())>::type>{}
                                                                                    ^
2019-11-29 19:45:59 -05:00
Ten10
940f4a5ceb Support Curl Error Buffer
Allow user to get error message when download fails
2019-11-29 19:38:40 -05:00
Lakshay Garg
018a50bcd0 Work around for a NVCC compiler bug
The NVCC compiler fails to compile the date library due
to a compiler bug which causes it to emit an error when
directly using std::ratio_{multiply,divide} in the template
instantiations for std::duration. This PR works around the
issue by introducing custom ratio_{multiply,divide} which
delegate to the standard library templates
2019-11-29 19:27:36 -05:00
Howard Hinnant
3e376be2e9 Rename link to time_zone_link
* At the request of LEWG
2019-11-08 19:36:09 +00:00
Howard Hinnant
224c71a899 Rename leap to leap_second and leaps to leap_seconds
* At the request of LEWG
2019-11-08 19:24:03 +00:00
jgzhuang
67e272a54e change the order in hh_mm_ss::to_duration() to have correct result on Windows for cases when h is 2147483647 hours and m and s are all 0 (#501) 2019-10-24 09:57:36 -04:00
Howard Hinnant
d399e10cba Bump zoned_time fixes for MSVC from 1900 to 1916 2019-10-22 13:28:48 -04:00
Howard Hinnant
96ffe23f72 Replace INTMAX_MAX with numeric_limits 2019-10-21 22:22:50 -04:00
Howard Hinnant
a5c4b4ebf8 Protect is_am and make12 from ADL 2019-09-17 15:48:15 -04:00
Alexej Harm
44344000f0 Fix MSVC C++ version detection 2019-09-12 19:58:05 -04:00
KerryJ
d21333f636 Fixes #484 2019-09-03 23:17:43 -04:00
maximilianriemensberger
cb4bf26fc7 Fix compilation error with GCC 5
GCC 5 complains that `operator-=` and `operator+=` are not constexpr.  The `-` and `+` operator appear seem to be fine.
2019-09-03 22:59:04 -04:00
Tomasz Kamiński
5a0057587d Correct behavior for classes for which only lvalue is convertible to string_view.
Added OnlyLValueString test case that shows the problem with
current impl. Implemented the change, that accept TimeZonePtrOrName
by forwarding reference (to preserve value category), and
merged time_zone selection into one trait.
2019-09-01 14:43:50 -04:00
Tomasz Kamiński
7c020642fb Fixed deduction guides for GCC 8.
The GCC 8 was correctly preffering the deduction guide
syntezied from the std::string_view constructor which is more
specialized than deduction guide. Changed the constructor
so the Duration cannot be deduced from it.
2019-09-01 14:43:50 -04:00
Howard Hinnant
141ba85614 Fix space-matches 0 spaces at end of format string 2019-08-23 15:51:18 -04:00
Robert Campion
dca8ddc659 Replace computed value with standard macro 2019-07-21 23:43:29 -04:00
James Beach
1f5c192f4a Resolve GCC 9.1.0 noexcept warning 2019-07-21 23:31:29 -04:00
Si Wei How
c0e7b4e2f7 Make date.h compatible with g++-4.7 2019-07-21 21:48:51 -04:00
AdrienBellanger
09d90a8b5e Fix operator<< for years with non C locale
Fix the issue https://github.com/HowardHinnant/date/issues/392
2019-07-21 21:20:49 -04:00
tomaszkam
27d1e1e54e Removed undefined behavioir from year_mont_day_last::day (#456)
This is done to make the result of calling day() on
year_month_day_last object that is !ok() unspecified.
Checked only months, are there are needed to avoid UB.
2019-05-28 09:01:14 -04:00
Jonathan Chapple
7817ebf45a Update date.h (#451)
endf -> endif
2019-05-20 09:44:20 -04:00
Howard Hinnant
a029f1105d Conditionally set _SILENCE_CXX17_UNCAUGHT_EXCEPTION_DEPRECATION_WARNING 2019-05-19 22:46:35 -04:00
Howard Hinnant
44215f6781 Eschew using directives in headers, even at function scope.
* There is still an impact on user code, though I'm not sure
  if by specification or compiler bug.
* Prefer using declarations instead.
2019-05-19 21:53:29 -04:00
Howard Hinnant
081e9af55b Migrate ptz.h from jan to January 2019-04-05 22:36:21 -04:00
Howard Hinnant
8a563041fa Adjust HAS_STRING_VIEW for VS
Fixes #330
2019-04-05 09:19:54 -04:00
Howard Hinnant
9dc96fd9b5 Silence warning
Fixes #337
2019-03-26 18:13:39 -04:00
Howard Hinnant
8b69087d35 Fix up constexpr of changed weekday_from_days 2019-03-21 12:23:38 -04:00
Howard Hinnant
d5e96f0991 Suppress VS-15 warning about concerning conditional expression is constant
Thanks to https://github.com/ujos for the report.
2019-03-20 21:24:01 -04:00
Evgen Bodunov
5ba1c1ad85 HAS_UNCAUGHT_EXCEPTIONS definition.
Added some flexibility for usage of std::uncaught_exceptions().
Xcode 10 uses clang and perfectly compiles C++17, but
std::uncaught_exceptions() is available only on iOS 10+ devices. When
application supports iOS 9 devices and uses C++17 there is no way to
build it, except drop iOS 9 support or remove C++17 code. Using this
define we could configure should date.h use std::uncaught_exceptions()
or not.
2019-03-20 20:43:43 -04:00
Howard Hinnant
cb7ca96f68 Protect weekday_from_days from signed overflow
Found by static analyzer.
This change makes weekday_from_days slightly more efficient.
2019-03-19 19:51:32 -04:00
Howard Hinnant
b5d025ea2f Align time_of_day with hh_mm_ss
Per committee review
2019-03-19 19:50:30 -04:00
Howard Hinnant
f782ae98f0 Fix type-o again 2019-02-20 15:27:44 -10:00
Howard Hinnant
d6c5d02068 Fix type-o in get_leap_second_info_t 2019-02-20 15:25:50 -10:00
Howard Hinnant
16077472af Rename is_leap_second to get_leap_second_info 2019-02-20 15:19:54 -10:00
Howard Hinnant
5a62c405e0 Remove unneeded make_precision 2019-02-03 23:21:36 -05:00
Howard Hinnant
09a19a09f4 Further consolidate time_of_day logic
Adjust how it works for floating point durations.
2019-02-03 16:14:56 -05:00
Howard Hinnant
9cb0013aef Update time_of_day to be more consistent ...
the needs of formatting.
2019-02-02 14:06:12 -05:00
NeroBurner
4e7e76b981 add c_encoding and iso_encoding weekday functions (#380)
- c_encoding satisfies ctime wday encoding: days since Sunday, range
  [0,6]
- iso_encoding satisfies ISO 8601 weekday:
  a digit d from 1 through 7, beginning with Monday and ending with Sunday
2019-01-19 14:46:21 -05:00
Howard Hinnant
90d0440884 Introduce %q and %Q to_stream formatting flags
* These flags format a duration.
* %Q specifies the duration's numeric value.
* %q specifies the duration's SI abbreviation.
* Example: format("%Q %q", 45ms) == "45 ms"
2019-01-19 14:30:19 -05:00
Daniela Engert
7231a182a4 Revert 5f34c40 and 23b1f00 in preparation of a better solution.
Signed-off-by: Daniela Engert <dani@ngrt.de>
2018-12-16 15:29:17 -05:00
Howard Hinnant
5f34c40523 More patches for VS-2017 compatiblity 2018-11-25 17:04:27 -05:00
Howard Hinnant
23b1f007fe Patch for VS-2017 compatiblity 2018-11-25 14:38:54 -05:00
Howard Hinnant
a22125ca40 Remove constexpr from islamic::year::isleap for C++11 2018-11-20 09:00:12 -05:00
Howard Hinnant
8f91ef27ed Revert "Model the TAI-UTC difference between 1961 and 1972"
This reverts commit 1eed461d06b02854d9310d5ab0198eccd2be1d1d.
2018-11-08 13:56:23 -08:00
Howard Hinnant
1eed461d06 Model the TAI-UTC difference between 1961 and 1972 2018-10-03 17:51:55 -04:00
Howard Hinnant
591f572b67 Allow %j to parse and format durations 2018-09-26 14:35:03 -07:00
F
69e9cd612f Prefer using std::string that using namespace std and unqualified string (#386)
'using namespace std;' in header files can conflict with custom
namespace names. For example 'string' is used without 'std::'
qualification. If tz.h is included in a file where string is a
namespace, it cannot be compiled anymore. The same happens with date.h
if ONLY_C_LOCALE=1.
2018-09-26 17:31:56 -04:00
Howard Hinnant
6a4d93a0bd Silence more shadow warnings 2018-07-01 23:00:33 -04:00
Howard Hinnant
39d6730665 Silence shadow warnings 2018-07-01 22:37:25 -04:00
Howard Hinnant
de6a03d337 Set _SILENCE_CXX17_UNCAUGHT_EXCEPTION_DEPRECATION_WARNING for VS 2018-06-27 09:21:19 -04:00
Jaka Bac
1b32e316db Workaround MSVC 19.14.26431 parsing bug (#355) 2018-06-21 10:08:59 -04:00
tomaszkam
f46885e632 Suffix d for days duration (#354) 2018-06-20 11:39:48 -04:00
Tomasz Kamiński
2d282e35fa Use string_literal for C++11 when possible 2018-06-19 19:37:02 -04:00
Howard Hinnant
d50970b32a Some backwards compatibility fixes for VS-2013 2018-06-12 18:13:24 -04:00
Christopher Blaesius
07876e4433 Character classification functions (isspace, isalnum) are undefined for signed chars
Convert them to int using char_traits or static_cast to unsigned char
2018-06-11 17:00:45 -04:00
Howard Hinnant
0197889505 Update to Sunday constants 2018-06-11 15:14:44 -04:00
Tomasz Kamiński
db60c5eb8e Unit test and typo fix 2018-06-11 10:45:41 -04:00
Tomasz Kamiński
9f1c4b0110 Implemented clock_cast for local_time.
Implemented clock_time_conversion<D, local_t> calling D::from_local
and clock_time_conversion<locat_t, S> calling S::to_local.

To avoid ambiguities addes:
* clock_time_conversion<local_t, local_t> - idenitity
* clock_time_conversion<local_t, utc_clock> - same as default (utc_clock::to_local)
* clock_time_conversion<utc_clock, local_t> - same as default (utc_clock::from_local)

In addition, as std::chrono::system_clock cannot be edited, added:
* clock_time_conversion<local_t, std::chrono::system_clock> - assumes same epoch
* clock_time_conversion<std::chrono::system_clock, local_t> - assumes same epoch
They will be required to resolve amibiguity anyway.
2018-06-11 10:45:41 -04:00
Tomasz Kamiński
da15227f6c Implemented to/from_local functions for utc/tai/gps.
Implemented to_local and from_local functions for utc_clock,
tai_clock and gps_clock. For the tai/gps clock used this function
for defining the io - we delegate to serializing/parsing local
time.

The drwaback is that the local_time cannot properly represent
leap second in the UTC time, so separate serialization is needed.
2018-06-11 10:45:41 -04:00
Howard Hinnant
d4fb7eb76d Put unspecified_month_disambiguator in namespace detail 2018-06-10 16:22:21 -04:00
Tomasz Kamiński
0e3e84fd56 Used suggested Tim Song implementation 2018-06-10 16:22:21 -04:00
Tomasz Kamiński
3eac2d376e Revert "Fixed addition of multi-year duration to year_month."
This reverts commit 328cecaa567e8b9da5dfcbcb4de9a550496bb55b.
2018-06-10 16:22:21 -04:00
Howard Hinnant
f5f4d76936 Replace save_stream with save_ostream
* In islamic.h and julian.h
2018-06-10 15:44:43 -04:00
Howard Hinnant
c7b69d949a Change the encoding for an invalid weekday from 7 to 8 2018-06-08 09:50:40 -04:00
Howard Hinnant
48baa942fc Use uncaught_exceptions in C++17 2018-06-06 13:52:23 -04:00
Howard Hinnant
be2ec2310b Emphasize Sunday over sun in the implementation
*  Keep the three letter lower case spellings for backwards
   compatibility purposes.
2018-06-03 13:55:00 -04:00
Howard Hinnant
40b83654b6 [API BREAKING] Remove conversion from weekday to unsigned
* 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;
2018-06-02 22:56:10 -04:00
Eugene Golushkov
1fdda81a30 fixed build with latest VS2017 v15.7.1; toolset MSVC 14.14 2018-06-02 16:14:18 -04:00
apo
f33e179936 Eliminate use of uninitialized offset. 2018-05-25 09:56:34 -04:00
Tomasz Kamiński
328cecaa56 Fixed addition of multi-year duration to year_month.
* Added new overloads for operator+/- between year_month and duration
  that is convertible to years, so it is better candidate for operands
  that are convertible to both years and months. To preserve
  functionality, this operator is conditionally noexcept.

* Reworked year_month_day, year_month_day_last, year_month_weekday,
  and year_month_weekday_last.

* Added tests for this new functionality.
2018-05-12 18:21:24 -04:00
Howard Hinnant
5d15157bbb Fix bug for parsing negative offsets of less than 1h 2018-05-05 12:01:56 -04:00
Howard Hinnant
a91ceefb4e Allow %H %M and %S to deal with negative durations 2018-04-23 20:31:28 -04:00
Howard Hinnant
88c661e9f3 Fix zoned_time deduction guides 2018-04-23 20:30:58 -04:00
Howard Hinnant
c665992a6e Allow heterogeneous zoned_time constructors
taking {string_view, zoned_time}
2018-04-21 17:45:52 -04:00
Howard Hinnant
9d0bcdb63f Fix deduction error in parse where only offset is requested 2018-04-18 21:56:11 -04:00
Howard Hinnant
973bd393bc Respect and minimize tie/flush in from/to_stream
* Save/restore tie, setting it to nullptr during the operation
* On construction tie_->flush()
* For ostreams only, flush if unitbuf
2018-04-18 21:47:15 -04:00
Howard Hinnant
d53db7a1cb And yet more fixes to allow duplicate flags on parse 2018-04-15 15:32:24 -04:00
Howard Hinnant
e5c69d84ab Fix constexpr issue for VS2015 2018-04-09 11:01:58 -04:00
Howard Hinnant
b48a18a1d9 More fixes to allow duplicate parsing 2018-04-08 15:49:06 -04:00
Howard Hinnant
cdb4b276d9 Allow duplicate parsing into the same fields
* as long as all duplicates produce consistent results.
2018-04-07 21:42:00 -04:00
Howard Hinnant
1d9e49ea21 to_stream sets failbit if unable to format
*  If a formatting flag requests data that is not available in
   the Streamable object, or if the Streamable object answers !ok(),
   failbit is set.
2018-04-06 11:19:44 -04:00
Howard Hinnant
0125d330ab Correct to_stream/from_stream handling of stream data
* to_stream and from_stream now reset the stream formatting state to
  default settings on entry, and restore the stream state on exit.

* to_stream and from_stream now correctly handle mis-modified flags.

* Fix %h to be equivalent to %b instead of %B.

* This addresses issues 319, 320 and 321.
2018-03-31 13:06:57 -04:00
Howard Hinnant
700489e475 Introduced full weekday and month names
* The standardized version of this library has std::chrono::January
  and std::chrono::Sunday in place of std::chrono_literals::jan and
  std::chrono_literals::sun.  Compatible names added to namespace
  date to ease transition from this lib to std::chrono.  The old
  names are retained for backwards compatibility.
2018-03-18 18:27:04 -04:00