Spec-Zone.ru › C++

Утилиты даты и времени

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

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

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

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

  • Часы,
  • Моменты времени,
  • Продолжительности.

Часы

Часы состоят из начальной точки (или эпохи) и частоты тиков. Например, часы могут иметь эпоху 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)
интервал времени
(шаблон класса)

Время суток

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

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

Календарь

Определено в заголовке <chrono>
Определено в пространстве имён std::chrono
last_spec
(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)
стандартный синтаксис для создания даты григорианского календаря
(функция)

Часовой пояс

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

Литералы

Определено в заголовке <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 Ввод/вывод

Определено в заголовке <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()
{
    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

Spec-Zone.ru

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