Namespaces
Variants

Date and time library

From cppreference.net

C++ включает поддержку двух типов манипуляции временем:

Содержание

Библиотека Chrono (начиная с C++11)

Библиотека chrono определяет несколько основных типов, а также служебные функции и общеупотребительные typedef-объявления:

(since C++20)

Часы

Часы состоят из начальной точки (или эпохи) и частоты тактов. Например, часы могут иметь эпоху 1 января 1970 года и тикать каждую секунду. C++ определяет несколько типов часов:

Определено в заголовке <chrono>
Определено в пространстве имён std::chrono
системные часы реального времени
(класс)
монотонные часы, которые никогда не корректируются
(класс)
часы с наименьшим доступным периодом тика
(класс)
определяет, является ли тип Clock
(шаблон класса) (шаблон переменной)
(C++20)
Clock для всемирного координированного времени (UTC)
(класс)
(C++20)
Clock для международного атомного времени (TAI)
(класс)
(C++20)
Clock для времени GPS
(класс)
(C++20)
Clock используемый для file time
(определение типа)
(C++20)
псевдо-часы, представляющие локальное время
(класс)

Временная точка

Временная точка - это продолжительность времени, прошедшая с эпохи определенных часов.

Определено в заголовочном файле <chrono>
Определено в пространстве имен std::chrono
(C++11)
точка во времени
(шаблон класса)
класс характеристик, определяющий преобразование временных точек одного часового механизма в другой
(шаблон класса)
(C++20)
преобразует временные точки одного часового механизма в другой
(шаблон функции)

Длительность

Длительность состоит из промежутка времени, определяемого как некоторое количество тактов некоторой единицы времени. Например, "42 секунды" может быть представлено длительностью, состоящей из 42 тактов единицы времени в 1 секунду.

Определено в заголовочном файле <chrono>
Определено в пространстве имён std::chrono
(C++11)
временной интервал
(шаблон класса)

Время суток (начиная с C++20)

hh_mm_ss разбивает длительность, представляющую время, прошедшее с полуночи, на часы, минуты, секунды и дробные секунды, если применимо. В основном это инструмент форматирования.

Определено в заголовке <chrono>
Определено в пространстве имён std::chrono
(C++20)
представляет время суток
(шаблон класса)
преобразует между 12-часовым/24-часовым форматом времени суток
(функция)

Календарь (since C++20)

Определено в заголовке <chrono>
Определено в пространстве имён std::chrono
(C++20)
класс-метка, обозначающий последний день или день недели в месяце
(класс)
(C++20)
представляет день месяца
(класс)
(C++20)
представляет месяц года
(класс)
(C++20)
представляет год в григорианском календаре
(класс)
(C++20)
представляет день недели в григорианском календаре
(класс)
представляет n-ый й weekday день месяца
(класс)
представляет последний weekday месяца
(класс)
(C++20)
представляет определённый day определённого month
(класс)
представляет последний день конкретного month
(класс)
представляет n-ый й weekday определённого month
(класс)
представляет последний weekday определённого month
(класс)
(C++20)
представляет конкретный month конкретного year
(класс)
представляет определённые year , month и day
(класс)
представляет последний день конкретного year и month
(класс)
представляет n-ый й weekday определённого year и month
(класс)
представляет последний weekday определённого year и month
(класс)
(C++20)
традиционный синтаксис для создания дат по григорианскому календарю
(функция)

Часовой пояс (since C++20)

Определено в заголовке <chrono>
Определено в пространстве имен std::chrono
(C++20)
описывает копию базы данных часовых поясов IANA
(класс)
(C++20)
представляет связанный список объектов tzdb
(класс)
предоставляет доступ и управление глобальной информацией базы данных часовых поясов
(функция)
находит time_zone по его имени
(функция)
возвращает текущий time_zone
(функция)
(C++20)
представляет часовой пояс
(класс)
(C++20)
представляет информацию о часовом поясе в конкретный момент времени
(класс)
(C++20)
представляет информацию о преобразовании локального времени в UNIX-время
(класс)
(C++20)
выбирает способ разрешения неоднозначного локального времени
(перечисление)
класс характеристик для указателей на часовые пояса, используемых zoned_time
(шаблон класса)
(C++20)
представляет часовой пояс и момент времени
(класс)
содержит информацию о вставке високосной секунды
(класс)
информация о вставке високосной секунды
(класс)
получает информацию о вставке високосной секунды из объекта utc_time
(шаблон функции)
представляет альтернативное название для часового пояса
(класс)
исключение, выбрасываемое для сообщения о несуществующем локальном времени
(класс)
исключение, выбрасываемое для сообщения о неоднозначном локальном времени
(класс)

Литералы (начиная с C++14)

Определено в заголовке <chrono>
Определено во встроенном пространстве имён std::literals::chrono_literals
литерал std::chrono::year , представляющий конкретный год
(функция)
литерал std::chrono::day , представляющий день месяца
(функция)
литерал std::chrono::duration , представляющий часы
(функция)
литерал std::chrono::duration , представляющий минуты
(функция)
литерал std::chrono::duration , представляющий секунды
(функция)
литерал std::chrono::duration , представляющий миллисекунды
(функция)
литерал std::chrono::duration , представляющий микросекунды
(функция)
литерал std::chrono::duration , представляющий наносекунды
(функция)

ХроноВвод-Вывод (since C++20)

Определено в заголовке <chrono>
Определено в пространстве имён std::chrono
(C++20)
парсит chrono объект из потока
(шаблон функции)

Примечания

Макрос тестирования возможностей Значение Стандарт Возможность
__cpp_lib_chrono 201510L (C++17) Функции округления для std::chrono::duration и std::chrono::time_point
201611L (C++17) constexpr для всех функций-членов std::chrono::duration и std::chrono::time_point
201907L (C++20) Календари и Часовые пояса
202306L (C++26) Поддержка хеширования для классов значений std::chrono

Библиотека даты и времени в стиле C

Также предоставлены функции даты и времени в стиле C, такие как std::time_t , std::difftime и CLOCKS_PER_SEC .

Пример

#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 finish{std::chrono::steady_clock::now()};
    const std::chrono::duration<double> elapsed_seconds{finish - start};
    std::cout << "Fibonacci(42): " << fb << "\nElapsed time: ";
//  std::cout << elapsed_seconds.count() << "s\n"; // До C++20
    std::cout << elapsed_seconds << '\n'; // Оператор << для chrono::duration в C++20
    // Выводит время UTC и локальное время.
    const auto tp_utc{std::chrono::system_clock::now()};
    std::cout << "Current time 'UTC' is: " << tp_utc << "\n"
                 "Current time 'Local' is: "
              << std::chrono::current_zone()->to_local(tp_utc) << '\n';
}

Возможный вывод:

Fibonacci(42): 267914296
Elapsed time: 0.728532s
Current time 'UTC' is: 2025-02-10 06:22:39.420666960
Current time 'Local' is: 2025-02-10 09:22:39.420666960