Date and time utilities
C++ includes support for two types of time manipulation:
- The
chrono
library, a flexible collection of types that track time with varying degrees of precision (e.g. std::chrono::time_point). - C-style date and time library (e.g. std::time).
Contents |
[edit] std::chrono
library
The chrono
library defines three(until C++20) five(since C++20) main types as well as utility functions and common typedefs:
- clocks,
- time points,
- durations,
|
(since C++20) |
[edit] Clocks
A clock consists of a starting point (or epoch) and a tick rate. For example, a clock may have an epoch of January 1, 1970 and tick every second. C++ defines several clock types:
Defined in header
<chrono> | |
Defined in namespace
std::chrono | |
(C++11) |
wall clock time from the system-wide realtime clock (class) |
(C++11) |
monotonic clock that will never be adjusted (class) |
(C++11) |
the clock with the shortest tick period available (class) |
(C++20) |
determines if a type is a Clock (class template) (variable template) |
(C++20) |
Clock for Coordinated Universal Time (UTC) (class) |
(C++20) |
Clock for International Atomic Time (TAI) (class) |
(C++20) |
Clock for GPS time (class) |
(C++20) |
Clock used for file time (typedef) |
(C++20) |
pseudo-clock representing local time (class) |
[edit] Time point
A time point is a duration of time that has passed since the epoch of a specific clock.
Defined in header
<chrono> | |
Defined in namespace
std::chrono | |
(C++11) |
a point in time (class template) |
(C++20) |
traits class defining how to convert time points of one clock to another (class template) |
(C++20) |
convert time points of one clock to another (function template) |
[edit] Duration
A duration consists of a span of time, defined as some number of ticks of some time unit. For example, "42 seconds" could be represented by a duration consisting of 42 ticks of a 1-second time unit.
Defined in header
<chrono> | |
Defined in namespace
std::chrono | |
(C++11) |
a time interval (class template) |
[edit] Time of day
hh_mm_ss
splits a duration representing time elapsed since midnight into hours, minutes, seconds, and fractional seconds, as applicable. It is primarily a formatting tool.
Defined in header
<chrono> | |
Defined in namespace
std::chrono | |
(C++20) |
represents a time of day (class template) |
(C++20) |
translates between a 12h/24h format time of day (function) |
[edit] Calendar
Defined in header
<chrono> | |
Defined in namespace
std::chrono | |
(C++20) |
tag class indicating the last day or weekday in a month (class) |
(C++20) |
represents a day of a month (class) |
(C++20) |
represents a month of a year (class) |
(C++20) |
represents a year in the Gregorian calendar (class) |
(C++20) |
represents a day of the week in the Gregorian calendar (class) |
(C++20) |
represents the nth weekday of a month (class) |
(C++20) |
represents the last weekday of a month (class) |
(C++20) |
represents a specific day of a specific month (class) |
(C++20) |
represents the last day of a specific month (class) |
(C++20) |
represents the nth weekday of a specific month (class) |
(C++20) |
represents the last weekday of a specific month (class) |
(C++20) |
represents a specific month of a specific year (class) |
(C++20) |
represents a specific year, month, and day (class) |
(C++20) |
represents the last day of a specific year and month (class) |
(C++20) |
represents the nth weekday of a specific year and month (class) |
(C++20) |
represents the last weekday of a specific year and month (class) |
(C++20) |
conventional syntax for Gregorian calendar date creation (function) |
[edit] Time zone
Defined in header
<chrono> | |
Defined in namespace
std::chrono | |
(C++20) |
describes a copy of the IANA time zone database (class) |
(C++20) |
represents a linked list of tzdb (class) |
accesses and controls the global time zone database information (function) | |
(C++20) |
locates a time_zone based on its name (function) |
(C++20) |
returns the current time_zone (function) |
(C++20) |
represents a time zone (class) |
(C++20) |
represents information about a time zone at a particular time point (class) |
(C++20) |
represents information about a local time to UNIX time conversion (class) |
(C++20) |
selects how an ambiguous local time should be resolved (enum) |
(C++20) |
traits class for time zone pointers used by zoned_time (class template) |
(C++20) |
represents a time zone and a time point (class) |
(C++20) |
contains information about a leap second insertion (class) |
(C++20) |
leap second insertion information (class) |
(C++20) |
obtains leap second insertion information from a utc_time object (function template) |
(C++20) |
represents an alternative name for a time zone (class) |
(C++20) |
exception thrown to report that a local time is nonexistent (class) |
(C++20) |
exception thrown to report that a local time is ambiguous (class) |
[edit] Literals
Defined in header
<chrono> | |
Defined in inline namespace
std::literals::chrono_literals | |
(C++20) |
a std::chrono::year literal representing a particular year (function) |
(C++20) |
a std::chrono::day literal representing a day of a month (function) |
(C++14) |
a std::chrono::duration literal representing hours (function) |
(C++14) |
a std::chrono::duration literal representing minutes (function) |
(C++14) |
a std::chrono::duration literal representing seconds (function) |
(C++14) |
a std::chrono::duration literal representing milliseconds (function) |
(C++14) |
a std::chrono::duration literal representing microseconds (function) |
(C++14) |
a std::chrono::duration literal representing nanoseconds (function) |
[edit] chrono
I/O
Defined in header
<chrono> | |
Defined in namespace
std::chrono | |
(C++20) |
parses a chrono object from a stream (function template) |
[edit] Notes
Feature-test macro | Value | Std | Feature |
---|---|---|---|
__cpp_lib_chrono |
201510L | (C++17) | Rounding functions for std::chrono::duration and std::chrono::time_point |
201611L | (C++17) | constexpr for all the member functions of std::chrono::duration and std::chrono::time_point | |
201907L | (C++20) | Calendars and Time zones | |
202306L | (C++26) | Hashing support for std::chrono value classes
|
[edit] C-style date and time library
Also provided are the C-style date and time functions, such as std::time_t, std::difftime, and CLOCKS_PER_SEC.
[edit] Example
Measures and displays an execution time of a function call.
#include <chrono> #include <iostream> long Fibonacci(unsigned n) { return n < 2 ? n : Fibonacci(n - 1) + Fibonacci(n - 2); } int main() { const auto start{std::chrono::steady_clock::now()}; const auto fb{Fibonacci(42)}; const auto end{std::chrono::steady_clock::now()}; const std::chrono::duration<double> elapsed_seconds{end - start}; std::cout << "Fibonacci(42): " << fb << "\nElapsed time: "; // std::cout << elapsed_seconds.count() << "s\n"; // Before C++20 std::cout << elapsed_seconds << '\n'; // C++20's chrono::duration operator<< }
Possible output:
Fibonacci(42): 267914296 Elapsed time: 0.791429s