Spec-Zone.ru › C++

Библиотека даты и времени

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

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

Библиотека chrono (начиная с C++11)

Библиотека chrono определяет несколько основных типов, а также вспомогательные функции и распространённые псевдонимы типов:

  • часы
  • моменты времени
  • длительности
  • даты календаря
  • информация о часовых поясах
(начиная с C++20)

Часы

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

Определено в заголовке <chrono>
Определено в пространстве имён std::chrono
system_clock
(C++11)
системное время по часам реального времени, общим для всей системы
(класс)
steady_clock
(C++11)
монотонные часы, которые никогда не корректируются
(класс)
high_resolution_clock
(C++11)
часы с наименьшим доступным периодом тика
(класс)
is_clockis_clock_v
(C++20)
определяет, является ли тип часами
(шаблон класса) (шаблон переменной)
utc_clock
(C++20)
Часы для всемирного координированного времени (UTC)
(класс)
tai_clock
(C++20)
Часы для международного атомного времени (TAI)
(класс)
gps_clock
(C++20)
Часы для времени GPS
(класс)
file_clock
(C++20)
Часы, используемые для времени файла
(псевдоним типа)
local_t
(C++20)
псевдочасы, представляющие местное время
(класс)

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

Момент времени — это длительность, прошедшая с эпохи определённых часов.

Определено в заголовке <chrono>
Определено в пространстве имён std::chrono
time_point
(C++11)
момент времени
(шаблон класса)
clock_time_conversion
(C++20)
класс свойств, определяющий способ преобразования моментов времени одних часов в моменты времени других
(шаблон класса)
clock_cast
(C++20)
преобразует моменты времени одних часов в моменты времени других
(шаблон функции)

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

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

Определено в заголовке <chrono>
Определено в пространстве имён std::chrono
duration
(C++11)
интервал времени
(шаблон класса)

Время суток (начиная с C++20)

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

Определено в заголовке <chrono>
Определено в пространстве имён std::chrono
hh_mm_ss
(C++20)
представляет время суток
(шаблон класса)
is_amis_pmmake12make24
(C++20)
преобразует время суток между 12- и 24-часовым форматами
(функция)

Календарь (начиная с C++20)

Определено в заголовке <chrono>
Определено в пространстве имён std::chrono
last_speclast
(C++20)
класс-тег, обозначающий последний день или день недели в месяце
(класс) (константа)
day
(C++20)
представляет день месяца
(класс)
month
(C++20)
представляет месяц года
(класс)
year
(C++20)
представляет год григорианского календаря
(класс)
weekday
(C++20)
представляет день недели в григорианском календаре
(класс)
weekday_indexed
(C++20)
представляет n-й weekday месяца
(класс)
weekday_last
(C++20)
представляет последний weekday месяца
(класс)
month_day
(C++20)
представляет определённый day определённого month
(класс)
month_day_last
(C++20)
представляет последний день определённого month
(класс)
month_weekday
(C++20)
представляет n-й weekday определённого month
(класс)
month_weekday_last
(C++20)
представляет последний weekday определённого month
(класс)
year_month
(C++20)
представляет определённый month определённого year
(класс)
year_month_day
(C++20)
представляет определённые year, month и day
(класс)
year_month_day_last
(C++20)
представляет последний день определённых year и month
(класс)
year_month_weekday
(C++20)
представляет n-й weekday определённых year и month
(класс)
year_month_weekday_last
(C++20)
представляет последний weekday определённых year и month
(класс)
operator/
(C++20)
общепринятый синтаксис создания даты григорианского календаря
(функция)

Часовой пояс (начиная с C++20)

Определено в заголовке <chrono>
Определено в пространстве имён std::chrono
tzdb
(C++20)
описывает копию базы данных часовых поясов IANA
(класс)
tzdb_list
(C++20)
представляет связный список объектов tzdb
(класс)
get_tzdbget_tzdb_listreload_tzdbremote_version
(C++20)
получает доступ к глобальной базе данных часовых поясов и управляет ею
(функция)
locate_zone
(C++20)
находит time_zone по его названию
(функция)
current_zone
(C++20)
возвращает текущий time_zone
(функция)
time_zone
(C++20)
представляет часовой пояс
(класс)
sys_info
(C++20)
представляет сведения о часовом поясе в определённый момент времени
(класс)
local_info
(C++20)
представляет сведения о преобразовании местного времени во время UNIX
(класс)
choose
(C++20)
определяет способ разрешения неоднозначности местного времени
(перечисление)
zoned_traits
(C++20)
класс свойств для указателей на часовые пояса, используемых в zoned_time
(шаблон класса)
zoned_time
(C++20)
представляет часовой пояс и момент времени
(класс)
leap_second
(C++20)
содержит сведения о добавлении високосной секунды
(класс)
leap_second_info
(C++20)
сведения о добавлении високосной секунды
(класс)
get_leap_second_info
(C++20)
получает сведения о добавлении високосной секунды из объекта utc_time
(шаблон функции)
time_zone_link
(C++20)
представляет альтернативное название часового пояса
(класс)
nonexistent_local_time
(C++20)
исключение, выбрасываемое для сообщения о несуществующем местном времени
(класс)
ambiguous_local_time
(C++20)
исключение, выбрасываемое для сообщения о неоднозначном местном времени
(класс)

Литералы (начиная с C++14)

Определено в заголовке <chrono>
Определено во встроенном пространстве имён std::literals::chrono_literals
operator""y
(C++20)
литерал std::chrono::year, представляющий определённый год
(функция)
operator""d
(C++20)
литерал std::chrono::day, представляющий день месяца
(функция)
operator""h
(C++14)
литерал std::chrono::duration, представляющий часы
(функция)
operator""min
(C++14)
литерал std::chrono::duration, представляющий минуты
(функция)
operator""s
(C++14)
литерал std::chrono::duration, представляющий секунды
(функция)
operator""ms
(C++14)
литерал std::chrono::duration, представляющий миллисекунды
(функция)
operator""us
(C++14)
литерал std::chrono::duration, представляющий микросекунды
(функция)
operator""ns
(C++14)
литерал std::chrono::duration, представляющий наносекунды
(функция)

Ввод-вывод chrono (начиная с C++20)

Определено в заголовке <chrono>
Определено в пространстве имён std::chrono
parse
(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()
{
    // Measures and displays an execution time of a function call.
    const auto start{std::chrono::steady_clock::now()};
    const auto fb{Fibonacci(42)};
    const auto finish{std::chrono::steady_clock::now()};
    const std::chrono::duration<double> elapsed_seconds{finish - 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<<

    // Prints UTC and local time.
    const auto tp_utc{std::chrono::system_clock::now()};
    std::cout << "Current time 'UTC' is: " << tp_utc << "\n"
                 "Current time 'Local' is: "
              << std::chrono::current_zone()->to_local(tp_utc) << '\n';
}

Возможный вывод:

Fibonacci(42): 267914296
Elapsed time: 0.728532s
Current time 'UTC' is: 2025-02-10 06:22:39.420666960
Current time 'Local' is: 2025-02-10 09:22:39.420666960

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/chrono

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API