Date and time library
C++ включает поддержку двух типов манипуляции временем:
- Библиотека chrono — гибкий набор типов для отслеживания времени с различной степенью точности (например, std::chrono::time_point ).
- C-библиотека работы с датой и временем (например, std::time ).
Содержание |
Библиотека Chrono (начиная с C++11)
Библиотека
chrono
определяет несколько основных типов, а также служебные функции и общеупотребительные typedef-объявления:
|
(since C++20) |
Часы
Часы состоят из начальной точки (или эпохи) и частоты тактов. Например, часы могут иметь эпоху 1 января 1970 года и тикать каждую секунду. C++ определяет несколько типов часов:
|
Определено в заголовке
<chrono>
|
|
|
Определено в пространстве имён
std::chrono
|
|
|
(C++11)
|
системные часы реального времени
(класс) |
|
(C++11)
|
монотонные часы, которые никогда не корректируются
(класс) |
|
(C++11)
|
часы с наименьшим доступным периодом тика
(класс) |
|
(C++20)
|
определяет, является ли тип
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)
|
класс характеристик, определяющий преобразование временных точек одного часового механизма в другой
(шаблон класса) |
|
(C++20)
|
преобразует временные точки одного часового механизма в другой
(шаблон функции) |
Длительность
Длительность состоит из промежутка времени, определяемого как некоторое количество тактов некоторой единицы времени. Например, "42 секунды" может быть представлено длительностью, состоящей из 42 тактов единицы времени в 1 секунду.
|
Определено в заголовочном файле
<chrono>
|
|
|
Определено в пространстве имён
std::chrono
|
|
|
(C++11)
|
временной интервал
(шаблон класса) |
Время суток (начиная с C++20)
hh_mm_ss
разбивает длительность, представляющую время, прошедшее с полуночи, на часы, минуты, секунды и дробные секунды, если применимо. В основном это инструмент форматирования.
|
Определено в заголовке
<chrono>
|
|
|
Определено в пространстве имён
std::chrono
|
|
|
(C++20)
|
представляет время суток
(шаблон класса) |
|
(C++20)
|
преобразует между 12-часовым/24-часовым форматом времени суток
(функция) |
Календарь (since C++20)
|
Определено в заголовке
<chrono>
|
|
|
Определено в пространстве имён
std::chrono
|
|
|
(C++20)
|
класс-метка, обозначающий
последний
день или день недели в месяце
(класс) |
|
(C++20)
|
представляет день месяца
(класс) |
|
(C++20)
|
представляет месяц года
(класс) |
|
(C++20)
|
представляет год в григорианском календаре
(класс) |
|
(C++20)
|
представляет день недели в григорианском календаре
(класс) |
|
(C++20)
|
представляет n-ый
й
weekday
день месяца
(класс) |
|
(C++20)
|
представляет последний
weekday
месяца
(класс) |
|
(C++20)
|
представляет определённый
day
определённого
month
(класс) |
|
(C++20)
|
представляет последний день конкретного
month
(класс) |
|
(C++20)
|
представляет n-ый
й
weekday
определённого
month
(класс) |
|
(C++20)
|
представляет последний
weekday
определённого
month
(класс) |
|
(C++20)
|
представляет конкретный
month
конкретного
year
(класс) |
|
(C++20)
|
представляет определённые
year
,
month
и
day
(класс) |
|
(C++20)
|
представляет последний день конкретного
year
и
month
(класс) |
|
(C++20)
|
представляет n-ый
й
weekday
определённого
year
и
month
(класс) |
|
(C++20)
|
представляет последний
weekday
определённого
year
и
month
(класс) |
|
(C++20)
|
традиционный синтаксис для создания дат по григорианскому календарю
(функция) |
Часовой пояс (since C++20)
|
Определено в заголовке
<chrono>
|
|
|
Определено в пространстве имен
std::chrono
|
|
|
(C++20)
|
описывает копию
базы данных часовых поясов IANA
(класс) |
|
(C++20)
|
представляет связанный список объектов
tzdb
(класс) |
|
предоставляет доступ и управление глобальной информацией базы данных часовых поясов
(функция) |
|
|
(C++20)
|
находит
time_zone
по его имени
(функция) |
|
(C++20)
|
возвращает текущий
time_zone
(функция) |
|
(C++20)
|
представляет часовой пояс
(класс) |
|
(C++20)
|
представляет информацию о часовом поясе в конкретный момент времени
(класс) |
|
(C++20)
|
представляет информацию о преобразовании локального времени в UNIX-время
(класс) |
|
(C++20)
|
выбирает способ разрешения неоднозначного локального времени
(перечисление) |
|
(C++20)
|
класс характеристик для указателей на часовые пояса, используемых
zoned_time
(шаблон класса) |
|
(C++20)
|
представляет часовой пояс и момент времени
(класс) |
|
(C++20)
|
содержит информацию о вставке високосной секунды
(класс) |
|
(C++20)
|
информация о вставке високосной секунды
(класс) |
|
(C++20)
|
получает информацию о вставке високосной секунды из объекта
utc_time
(шаблон функции) |
|
(C++20)
|
представляет альтернативное название для часового пояса
(класс) |
|
(C++20)
|
исключение, выбрасываемое для сообщения о несуществующем локальном времени
(класс) |
|
(C++20)
|
исключение, выбрасываемое для сообщения о неоднозначном локальном времени
(класс) |
Литералы (начиная с C++14)
|
Определено в заголовке
<chrono>
|
|
|
Определено во встроенном пространстве имён
std::literals::chrono_literals
|
|
|
(C++20)
|
литерал
std::chrono::year
, представляющий конкретный год
(функция) |
|
(C++20)
|
литерал
std::chrono::day
, представляющий день месяца
(функция) |
|
(C++14)
|
литерал
std::chrono::duration
, представляющий часы
(функция) |
|
(C++14)
|
литерал
std::chrono::duration
, представляющий минуты
(функция) |
|
(C++14)
|
литерал
std::chrono::duration
, представляющий секунды
(функция) |
|
(C++14)
|
литерал
std::chrono::duration
, представляющий миллисекунды
(функция) |
|
(C++14)
|
литерал
std::chrono::duration
, представляющий микросекунды
(функция) |
|
(C++14)
|
литерал
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