* 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;
Date
Summary
This is actually several separate C++11/C++14/C++17 libraries:
-
"date.h"
is a header-only library which builds upon<chrono>
. It adds some newduration
types, and newtime_point
types. It also adds "field" types such asyear_month_day
which is a struct{year, month, day}
. And it provides convenient means to convert between the "field" types and thetime_point
types. -
"tz.h"
/"tz.cpp"
are a timezone library built on top of the"date.h"
library. This timezone library is a complete parser of the IANA timezone database. It provides for an easy way to access all of the data in this database, using the types from"date.h"
and<chrono>
. The IANA database also includes data on leap seconds, and this library provides utilities to compute with that information as well. -
"iso_week.h"
is a header-only library built on top of the"date.h"
library which implements the ISO week date calendar.- Documentation: http://howardhinnant.github.io/date/iso_week.html
-
"julian.h"
is a header-only library built on top of the"date.h"
library which implements a proleptic Julian calendar which is fully interoperable with everything above.- Documentation: http://howardhinnant.github.io/date/julian.html
-
"islamic.h"
is a header-only library built on top of the"date.h"
library which implements a proleptic Islamic calendar which is fully interoperable with everything above.- Documentation: http://howardhinnant.github.io/date/islamic.html
Standardization
Slightly modified versions of "date.h"
and "tz.h"
were voted into the C++20 working draft at the Jacksonville FL meeting on 2018-03-17:
Build & Test
You will need CMake and a recent C++ compiler. Here follows a guide of how to build and test using the CMake Makefile generator.
mkdir build
cd build
cmake ../
cmake --build . --target testit # Consider '-- -j4' for multithreading
Projects using this library
- www.safe.com
- www.webtoolkit.eu/wt
If you would like your project (or product) on this list, just let me know.