Пространства имён
Варианты
Действия

Функции даты и времени

Материал из cppreference.com
< cpp
 
 
Библиотека утилит
Языковая поддержка
Поддержка типов (базовые типы, RTTI)
Макросы тестирования функциональности библиотеки (C++20)    
Управление динамической памятью
Программные утилиты
Поддержка сопрограмм (C++20)
Вариативные функции
Трёхстороннее сравнение (C++20)
(C++20)
(C++20)(C++20)(C++20)(C++20)(C++20)(C++20)
Общие утилиты
Дата и время
Функциональные объекты
Библиотека форматирования (C++20)
(C++11)
Операторы отношения (устарело в C++20)
Целочисленные функции сравнения
(C++20)(C++20)(C++20)    
(C++20)
Операции обмена и типа
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Общие лексические типы
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
Элементарные преобразования строк
(C++17)
(C++17)
 
 

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
(C++11)
временной интервал
(шаблон класса) [править]

[править] Время суток

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

Определены в заголовочном файле <chrono>
Определены в пространстве имён std::chrono
(C++20)
представляет время суток
(шаблон класса) [править]
переводит время суток между 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
(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