Chrono is extended to support calendars and timezones. Only Gregorian calendar is supported.
chrono::year_month_day date{2019y, September, 18d};auto date = 2019y/September/18d; // 18d/September/2019y || September/18d/2019yauto date = September/last/2019y;auto date = 31d/October/2019;
if (!date.ok()) {
date = chrono::sys_days{date};
}auto date = Friday[2]/November/2019y;daysweeksmonthsyears
-
utc_clockrepresents Coordinated Universal Time (UTC), measures time since 00:00:00 UTC, Thursday, 1 January 1970, and includs leap seconds. -
tai_clockrepresents International Atomic Time (TAI), measures time since 00:00:00, 1 January 1958, and was offseted 10 seconds ahead of UTC at that date, does not include leap seconds. -
gps_clockrepresents Global Positioning System (GPS) time, measures time since 00:00:00, 6 January 1980 UTC, does not include leap seconds. -
file_clock- alias for the clock used forfilesystem::file_time_type::clock, epoch is unspecified.
template<class Duration>
using sys_time = chrono::time_point<chrono::system_clock, Duration>;
using sys_seconds = sys_time<chrono::seconds>;
using sys_days = sys_time<chrono::days>;auto now = system_clock::now();auto timestamp = sys_days{2019y/September/18d} + 9h + 35m + 10s; // 2019-09-18 09:35:10 UTC- Conver UTC to Denver time
auto now = system_clock::now();
zoned_time current{current_zone(), now};
zoned_time denver{"America/Denver", now};- Construct a localtime in Denver
auto denver = chrono::zoned_time{"America/Denver", chrono::local_days{Wednesday[3]/September/2019} + 9h};- Get current localtime
auto local = chrono::zoned_time{chrono::current_zone(), chrono::system_clock::now()};C++20 chrono fully integrates into C++20 format
auto tp = system_clock::now();
auto tz = locale_zone("Europe/Berlin");
cout << format("{:%F %T %Z}\n", zoned_time{tz, tp});>_ 2019-11-14 12:13:14.123456 CET
cout << format("{:%d.%m.%Y %T%z}\n", zoned_time{tz, tp});>_ 14.11.2019 12:13:14.123556+0100
cout << format(locale("de_DE"), "{:%d.%m.%Y %T%z}\n", zoned_time{tz, tp});>_ 14.11.2019 12:13:14,123656+0100
cout << format("{:%d.%m.%Y %T%z}\n", zoned_time{tz, floor<seconds>(tp)});>_ 14.11.2019 12:13:14
If you can format it, you can chrono::parse it back in,
usually with the same formatting string
system_clock::time_point tp;
cin >> parse("%d.%m.%Y %T%z", tp);
cout << tp << '\n';>_
input: 14.11.2019 12:13:14.123556+0100
output: 2019-11-14 11:13:14.123556