Утилиты даты и времени
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) | определяет, является ли тип часами (шаблон класса) (шаблон переменной) |
|
(C++20) | Часы для координированного универсального времени (UTC) (класс) |
|
(C++20) | Часы для международного атомного времени (TAI) (класс) |
|
(C++20) | Часы для времени GPS (класс) |
|
(C++20) | Часы, используемые для времени файла (псевдоним) |
|
(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) | представляет 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) | стандартный синтаксис для создания даты григорианского календаря (функция) |
Часовой пояс
Определено в заголовке <chrono> |
|
|---|---|
Определено в пространстве имён std::chrono |
|
|
(C++20) | описывает копию базы данных часовых поясов IANA (класс) |
|
(C++20) | представляет собой связанный список tzdb (класс) |
|
(C++20) | обеспечивает доступ и управление информацией о глобальной базе данных часовых поясов (функция) |
|
(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) | исключение, выбрасываемое для сообщения о том, что локальное время неоднозначно (класс) |
Литералы
Определено в заголовке <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) | Календари и Временные зоны | |
| 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 << "\nElapsed time: ";
// std::cout << elapsed_seconds.count() << "s\n"; // Before C++20
std::cout << elapsed_seconds << '\n'; // C++20's chrono::duration operator<<
}Возможный вывод:
Fibonacci(42): 267914296 Elapsed time: 0.791429s
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/chrono