◐ Shell
clean mode source ↗

Функции даты и времени — cppreference.com

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

  • Библиотека chrono, гибкая коллекция типов, которые отслеживают время с разной степенью точности (например, std::chrono::time_point).
  • Библиотека даты и времени в стиле C (например, std::time)

Библиотека std::chrono

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

  • часы
  • моменты времени
  • длительности

Часы

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

Определены в заголовочном файле <chrono>

Определены в пространстве имён std::chrono

текущее время из общесистемных часов реального времени
(класс) [править]
монотонные часы, которые никогда не будут корректироваться
(класс) [править]
часы с самым коротким периодом такта
(класс) [править]
определяет, является ли тип типом Clock
(шаблон класса) (шаблонная переменная) [править]

(C++20)

Clock для Всемирного Координированного Времени (UTC - Coordinated Universal Time)
(класс) [править]

(C++20)

Clock для Международного Атомного Времени (TAI - International Atomic Time)
(класс) [править]

(C++20)

Clock для времени GPS
(класс) [править]
Clock, используемый для времени файла
(определение типа) [править]

(C++20)

псевдочасы, представляющие местное время
(класс) [править]

Момент времени

Момент времени, это промежуток времени, прошедший с эпохи определённых часов.

Определены в заголовочном файле <chrono>

Определены в пространстве имён std::chrono

момент времени
(шаблон класса) [править]
класс свойств, определяющий, как преобразовывать моменты времени одних часов в другие
(шаблон класса) [править]
конвертирует моменты времени одних часов в другие
(шаблон функции) [править]

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

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

Определены в заголовочном файле <chrono>

Определены в пространстве имён std::chrono

временной интервал
(шаблон класса) [править]

Время суток

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

Определены в заголовочном файле <chrono>

Определены в пространстве имён std::chrono

представляет время суток
(шаблон класса) [править]
переводит время суток между 12-ти и 24-ёх часовыми форматами
(функция) [править]

Календарь

Определены в заголовочном файле <chrono>

Определены в пространстве имён std::chrono

(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
(класс) [править]
получает доступ к и контролирует информацию о глобальной базе данных часовых поясов
(функция) [править]
находит часовой пояс на основе его имени
(функция) [править]
возвращает текущий time_zone
(функция) [править]

(C++20)

представляет часовой пояс
(класс) [править]

(C++20)

представляет информацию о часовом поясе в конкретный момент времени
(класс) [править]
представляет информацию о местном времени в преобразованном времени UNIX
(класс) [править]

(C++20)

выбирает способ разрешения неоднозначного местного времени
(перечисление) [править]
класс свойств для указателей часовых поясов, используемых zoned_time
(шаблон класса) [править]
представляет часовой пояс и момент времени
(класс) [править]
содержит информацию о вставке високосной секунды
(класс) [править]
информация о добавлении високосной секунды
(класс) [править]
получает информацию о добавлении високосной секунды из объекта utc_time
(шаблон функции) [править]
представляет альтернативное имя для часового пояса
(класс) [править]
исключение сообщающее, что местное время не существует
(класс) [править]
исключение, сообщающее, что местное время неоднозначно
(класс) [править]

Литералы

Определены в заголовочном файле <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, представляющий наносекунды
(функция) [править]

Ввод/Вывод chrono

Определены в заголовочном файле <chrono>

Определены в пространстве имён std::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