Функции даты и времени
C++ включает поддержку двух типов манипуляции временем:
- Библиотека
chrono, гибкая коллекция типов, которые отслеживают время с разной степенью точности (например, std::chrono::time_point). - Библиотека даты и времени в стиле C (например, std::time)
Библиотека std::chrono
Библиотека chrono определяет три основных типа, а также служебные функции и общие определения типов.
- часы
- моменты времени
- длительности
Часы
Часы состоят из начальной точки (или эпохи) и скорости такта. Например, часы могут иметь эпоху 1 января 1970 года и тикать каждую секунду. C++ определяет несколько типов часов:
Определены в заголовочном файле
<chrono> | |
Определены в пространстве имён
std::chrono | |
(C++11) |
текущее время из общесистемных часов реального времени (класс) |
(C++11) |
монотонные часы, которые никогда не будут корректироваться (класс) |
(C++11) |
часы с самым коротким периодом такта (класс) |
(C++20) |
определяет, является ли тип типом Clock (шаблон класса) (шаблонная переменная) |
(C++20) |
Clock для Всемирного Координированного Времени (UTC - Coordinated Universal Time) (класс) |
(C++20) |
Clock для Международного Атомного Времени (TAI - International Atomic Time) (класс) |
(C++20) |
Clock для времени GPS (класс) |
(C++20) |
Clock, используемый для времени файла (определение типа) |
(C++20) |
псевдочасы, представляющие местное время (класс) |
Момент времени
Момент времени, это промежуток времени, прошедший с эпохи определённых часов.
Определены в заголовочном файле
<chrono> | |
Определены в пространстве имён
std::chrono | |
(C++11) |
момент времени (шаблон класса) |
(C++20) |
класс свойств, определяющий, как преобразовывать моменты времени одних часов в другие (шаблон класса) |
(C++20) |
конвертирует моменты времени одних часов в другие (шаблон функции) |
Длительность
Длительность состоит из промежутка времени, определяемого как некоторое количество тактов некоторой единицы времени. Например, "42 секунды" можно представить как продолжительность, состоящую из 42 тактов с 1-секундной единицей времени.
Определены в заголовочном файле
<chrono> | |
Определены в пространстве имён
std::chrono | |
(C++11) |
временной интервал (шаблон класса) |
Время суток
hh_mm_ss делит продолжительность, представляющую время, прошедшее с полуночи, на часы, минуты, секунды и доли секунды, если применимо. Это в первую очередь инструмент форматирования.
Определены в заголовочном файле
<chrono> | |
Определены в пространстве имён
std::chrono | |
(C++20) |
представляет время суток (шаблон класса) |
(C++20) |
переводит время суток между 12-ти и 24-ёх часовыми форматами (функция) |
Календарь
Определены в заголовочном файле
<chrono> | |
Определены в пространстве имён
std::chrono | |
(C++20) |
теговый класс, указывающий на последний день или день недели в месяце (класс) |
(C++20) |
представляет день месяца (класс) |
(C++20) |
представляет месяц в году (класс) |
(C++20) |
представляет год по григорианскому календарю (класс) |
(C++20) |
представляет день недели по григорианскому календарю (класс) |
(C++20) |
представляет энный день недели месяца (класс) |
(C++20) |
представляет последний день недели месяца (класс) |
(C++20) |
представляет собой определённый день определённого месяца (класс) |
(C++20) |
представляет последний день определённого месяца (класс) |
(C++20) |
представляет энный день недели определённого месяца (класс) |
(C++20) |
представляет последний день недели определённого месяца (класс) |
(C++20) |
представляет определённый месяц определённого года (класс) |
(C++20) |
представляет конкретный год, месяц и день (класс) |
(C++20) |
представляет последний день определённого года и месяца (класс) |
(C++20) |
представляет энный день недели определённого года и месяца (класс) |
(C++20) |
представляет последний день недели определённого года и месяца (класс) |
(C++20) |
стандартный синтаксис для создания даты по григорианскому календарю (функция) |
Часовой пояс
Определены в заголовочном файле
<chrono> | |
Определены в пространстве имён
std::chrono | |
(C++20) |
описывает копию базы данных часовых поясов IANA - Internet Assigned Numbers Authority (Администрация Адресного Пространства Интернет) (класс) |
(C++20) |
представляет собой связанный список tzdb (класс) |
| получает доступ к и контролирует информацию о глобальной базе данных часовых поясов (функция) | |
(C++20) |
находит часовой пояс на основе его имени (функция) |
(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) |
исключение, сообщающее, что местное время неоднозначно (класс) |
Литералы
Определены в заголовочном файле
<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, представляющий наносекунды (функция) |
Ввод/Вывод chrono
Определены в заголовочном файле
<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) | no section name и no section name}} | |
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 end{std::chrono::steady_clock::now()};
const std::chrono::duration<double> elapsed_seconds{end - start};
std::cout << "fibonacci(42): " << fb << '\n' << "прошедшее время: ";
// std::cout << elapsed_seconds.count() << "s\n"; // До C++20
std::cout << elapsed_seconds << '\n'; // chrono::duration operator<< в C++20
}
Возможный вывод:
fibonacci(42): 267914296
прошедшее время: 0.791429s