Функции даты и времени — cppreference.com
C++ включает поддержку двух типов манипуляции временем:
- Библиотека
chrono, гибкая коллекция типов, которые отслеживают время с разной степенью точности (например, std::chrono::time_point). - Библиотека даты и времени в стиле C (например, std::time)
Библиотека std::chrono
Библиотека chrono определяет три основных типа, а также служебные функции и общие определения типов.
- часы
- моменты времени
- длительности
Часы
Часы состоят из начальной точки (или эпохи) и скорости такта. Например, часы могут иметь эпоху 1 января 1970 года и тикать каждую секунду. C++ определяет несколько типов часов:
Определены в заголовочном файле | |
Определены в пространстве имён | |
(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) |
псевдочасы, представляющие местное время (класс) [править] |
Момент времени
Момент времени, это промежуток времени, прошедший с эпохи определённых часов.
Определены в заголовочном файле | |
Определены в пространстве имён | |
| момент времени (шаблон класса) [править] | |
| класс свойств, определяющий, как преобразовывать моменты времени одних часов в другие (шаблон класса) [править] | |
| конвертирует моменты времени одних часов в другие (шаблон функции) [править] | |
Длительность
Длительность состоит из промежутка времени, определяемого как некоторое количество тактов некоторой единицы времени. Например, "42 секунды" можно представить как продолжительность, состоящую из 42 тактов с 1-секундной единицей времени.
Определены в заголовочном файле | |
Определены в пространстве имён | |
| временной интервал (шаблон класса) [править] | |
Время суток
hh_mm_ss делит продолжительность, представляющую время, прошедшее с полуночи, на часы, минуты, секунды и доли секунды, если применимо. Это в первую очередь инструмент форматирования.
Определены в заголовочном файле | |
Определены в пространстве имён | |
| представляет время суток (шаблон класса) [править] | |
| переводит время суток между 12-ти и 24-ёх часовыми форматами (функция) [править] | |
Календарь
Определены в заголовочном файле | |
Определены в пространстве имён | |
(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) |
стандартный синтаксис для создания даты по григорианскому календарю (функция) [править] |
Часовой пояс
Определены в заголовочном файле | |
Определены в пространстве имён | |
(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) |
исключение, сообщающее, что местное время неоднозначно (класс) [править] |
Литералы
Определены в заголовочном файле | |
Определены в пространстве имён | |
(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 из потока (шаблон функции) [править] | |
Примечание
| Макрос тест функциональности | |||
|---|---|---|---|
__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