Namespaces
Variants
Views
Actions

Date and time utilities

From cppreference.com
< cpp
 
 
Utilities library
General utilities
Date and time
Function objects
Formatting library (C++20)
(C++11)
Relational operators (deprecated in C++20)
Integer comparison functions
(C++20)(C++20)(C++20)   
(C++20)
Swap and type operations
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Common vocabulary types
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
Elementary string conversions
(C++17)
(C++17)
 
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 main types as well as utility functions and common typedefs.

  • clocks
  • time points
  • durations

[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
wall clock time from the system-wide realtime clock
(class) [edit]
monotonic clock that will never be adjusted
(class) [edit]
the clock with the shortest tick period available
(class) [edit]
determines if a type is a Clock
(class template) (variable template) [edit]
(C++20)
Clock for Coordinated Universal Time (UTC)
(class) [edit]
(C++20)
Clock for International Atomic Time (TAI)
(class) [edit]
(C++20)
Clock for GPS time
(class) [edit]
Clock used for file time
(typedef) [edit]
(C++20)
pseudo-clock representing local time
(class) [edit]

[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
a point in time
(class template) [edit]
traits class defining how to convert time points of one clock to another
(class template) [edit]
convert time points of one clock to another
(function template) [edit]

[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]

[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) [edit]
translates between a 12h/24h format time of day
(function) [edit]

[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) [edit]
(C++20)
represents a day of a month
(class) [edit]
(C++20)
represents a month of a year
(class) [edit]
(C++20)
represents a year in the Gregorian calendar
(class) [edit]
(C++20)
represents a day of the week in the Gregorian calendar
(class) [edit]
represents the n-th weekday of a month
(class) [edit]
represents the last weekday of a month
(class) [edit]
(C++20)
represents a specific day of a specific month
(class) [edit]
represents the last day of a specific month
(class) [edit]
represents the n-th weekday of a specific month
(class) [edit]
represents the last weekday of a specific month
(class) [edit]
represents a specific month of a specific year
(class) [edit]
represents a specific year, month, and day
(class) [edit]
represents the last day of a specific year and month
(class) [edit]
represents the n-th weekday of a specific year and month
(class) [edit]
represents the last weekday of a specific year and month
(class) [edit]
(C++20)
conventional syntax for Gregorian calendar date creation
(function) [edit]

[edit] Time zone

Defined in header <chrono>
Defined in namespace std::chrono
(C++20)
describes a copy of the IANA time zone database
(class) [edit]
(C++20)
represents a linked list of tzdb
(class) [edit]
accesses and controls the global time zone database information
(function) [edit]
locates a time_zone based on its name
(function) [edit]
returns the current time_zone
(function) [edit]
(C++20)
represents a time zone
(class) [edit]
(C++20)
represents information about a time zone at a particular time point
(class) [edit]
represents information about a local time to UNIX time conversion
(class) [edit]
(C++20)
selects how an ambiguous local time should be resolved
(enum) [edit]
traits class for time zone pointers used by zoned_time
(class template) [edit]
represents a time zone and a time point
(class) [edit]
contains information about a leap second insertion
(class) [edit]
leap second insertion information
(class) [edit]
obtains leap second insertion information from a utc_time object
(function template) [edit]
represents an alternative name for a time zone
(class) [edit]
exception thrown to report that a local time is nonexistent
(class) [edit]
exception thrown to report that a local time is ambiguous
(class) [edit]

[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]

[edit] Notes

Feature-test macro Value Std Comment
__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

[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

This example displays information about the execution time of a function call:

#include <iostream>
#include <chrono>
 
long fibonacci(unsigned n)
{
    if (n < 2) return n;
    return fibonacci(n-1) + fibonacci(n-2);
}
 
int main()
{
    auto start = std::chrono::steady_clock::now();
    std::cout << "f(42) = " << fibonacci(42) << '\n';
    auto end = std::chrono::steady_clock::now();
    std::chrono::duration<double> elapsed_seconds = end-start;
    std::cout << "elapsed time: " << elapsed_seconds.count() << "s\n";
}

Possible output:

f(42) = 267914296
elapsed time: 1.88232s