Хроно в C ++
Библиотека Chrono используется для работы с датой и временем. Эта библиотека была разработана для учета того факта, что таймеры и часы могут отличаться в разных системах и, следовательно, для улучшения с течением времени с точки зрения точности. Уникальная особенность хронографа заключается в том, что он обеспечивает нейтральное с точки зрения точности понятие, отделяя продолжительность и момент времени («время») от определенных часов.
продолжительность
Объект длительности выражает промежуток времени с помощью отсчета, например, минуты, два часа или десять миллисекунд. Например, «42 секунды» могут быть представлены продолжительностью, состоящей из 42 тиков в 1-секундную единицу времени.
// C ++ программа для иллюстрации утилиты
// длительность функции :: count
#include
#include
using namespace std::chrono;
// std :: chrono :: milliseconds является
std::cout «duration (in periods): » ;
std::cout «duration (in seconds): » ;
Часы
Часы состоят из начальной точки (или эпохи) и частоты тиков. Например, часы могут иметь эпоху 22 февраля 1996 года и тикать каждую секунду. C ++ определяет три типа часов:
Момент времени
Объект time_point выражает момент времени относительно эпохи часов. Внутри объект хранит объект типа длительности и использует тип Clock в качестве ссылки для своей эпохи.
// C ++ программа для иллюстрации момента времени
// и функции системных часов
#include
#include
#include
// Функция для расчета
// ряд Фибоначчи
long fibonacci(unsigned n)
return fibonacci(n-1) + fibonacci(n-2);
// Используем момент времени и системный час
std::chrono::time_point start, end;
std:: time_t end_time = std::chrono::system_clock::to_time_t(end);
std::cout «finished computation at » ctime (&end_time)
Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.
C++20. Библиотека chrono и Время суток
Обновл. 15 Сен 2021 |
В стандарте C++20 библиотека chrono из C++11 получила важные дополнения. Наиболее заметными из них являются: календарь, поддержка часовых поясов, тип времени суток и мощный функционал форматирования временных интервалов.
Библиотека времени в C++11
Для начала вам потребуется базовое понимание библиотеки chrono. Стандарт C++11 ввел три основных компонента для работы со временем:
Момент времени (англ. «Time Point») — задается точкой отсчета (так называемой «эпохой») и сопутствующим временным интервалом.
Временной интервал/Длительность (англ. «Time duration») — разница между двумя моментами времени. Определяется числом «тиков» времени.
Часы (англ. «Clock») — состоят из точки отсчета (эпохи) и «тика» времени. Эта информация позволяет рассчитать текущее время.
Все три компонента зависят друг от друга.
Расширение библиотеки chrono в C++20
Стандарт C++20 добавляет в библиотеку chrono новые компоненты:
Время суток (англ. «Time of day») — это временной интервал, ведущий свой отсчет с полуночи, представляемый в виде часов, минут, секунд и долей секунды.
Календарь (англ. «Calendar») — обозначает различные календарные даты, такие как: год, месяц, день недели или n-й день недели.
Часовой пояс (англ. «Time-zone») — представляет собой время, характерное для определенной географической области.
По сути, функционал часовых поясов (C++20) основан на функционале календаря (C++20), а функционал календаря (C++20) основан на первоначальном функционале библиотеки chrono (C++11).
Но это еще не всё. Расширения библиотеки включают в себя новые часы. Благодаря библиотеке форматирования в C++20, мы теперь можем легко считывать/записывать временные интервалы.
Библиотека date
При написании данной статьи еще ни один компилятор C++ не реализовал поддержку расширения библиотеки chrono из стандарта C++20. Но не стоит отчаиваться, ведь мы можем воспользоваться её прототипом — библиотекой date от Howard Hinnant, которая, по сути, является надмножеством расширенного функционала работы со временем из стандарта C++20.
Существуют различные способы использования данной библиотеки:
Онлайн-компилятор wandbox. Говард уже загрузил заголовочный файл date.h, которого будет достаточно для наших экспериментов с календарем и новым типом std::time_of_day. Также вы можете сами скопировать содержимое актуального файла date.h в соответствующую вкладку wandbox-а:
Либо же можно скопировать заголовочный файл date.h в папку с заголовочными файлами вашего компилятора C++.
Требуемый стандарт C++
В целом, для работы с библиотекой date, компилятора, поддерживающего стандарт C++14, будет достаточно. Правда, есть одно исключение, а именно:
Include chrono c что это
Этот браузер больше не поддерживается.
Выполните обновление до Microsoft Edge, чтобы воспользоваться новейшими функциями, обновлениями для системы безопасности и технической поддержкой.
Включите стандартный заголовок для определения классов и функций, которые представляют и обрабатывают длительность и время ожидания.
начиная с Visual Studio 2015, реализация steady_clock изменена в соответствии со стандартными требованиями C++ для обеспечения стабильности и монотонности:
Требования
Заголовок
Имен
Типы календрикал
Часы
Часовые пояса
Исключения
| Имя | Описание |
|---|---|
| ambiguous_local_time | Ошибка, вызываемая при local_time преобразовании в, sys_time и результат неоднозначен. |
| nonexistent_local_time | Ошибка, вызываемая при local_time преобразовании в, sys_time в результате чего не существует времени. |
Функции
Связанные с часовым поясом
| Имя | Описание |
|---|---|
| current_zone | Возвращает текущий часовой пояс. |
| get_tzdb | Возвращает запись базы данных первого часового пояса. |
| get_tzdb_list | Возвращает список записей базы данных часового пояса. |
| reload_tzdb | Возвращает обновленную запись базы данных часового пояса. |
| remote_version | Проверяет наличие обновленной записи базы данных часового пояса. |
Операторы
Определения типов
Удобные типы
| Имя | Описание |
|---|---|
| typedef duration nanoseconds; | Синоним для duration типа с тактовым периодом, имеющим один биллионс (1/1000000000) секунды. |
| typedef duration microseconds; | Синоним для duration типа с тактовым периодом в один миллион (1/1000000) секунды. |
| typedef duration milliseconds; | Синоним для duration типа с тактовым периодом в одну тысячу (1/1000) секунды. |
| typedef duration seconds; | Синоним для duration типа с тактовым периодом в 1 секунду. |
| typedef duration > minutes; | Синоним для duration типа с тактовым периодом в 1 минуту. |
| typedef duration > hours; | Синоним для duration типа с тактовым периодом в 1 час. |
Удобные типы
Признаки типов
Литералы
| Объявление | Описание |
|---|---|
| hours operator «» h(unsigned long long Val) | Указывает часы как целочисленное значение. |
| duration > operator «» h(long double Val) | Указывает часы как значение с плавающей запятой. |
| minutes (operator «» min)(unsigned long long Val) | Указывает минуты как целочисленное значение. |
| duration > (operator «» min)( long double Val) | Указывает минуты как значение с плавающей запятой. |
| seconds operator «» s(unsigned long long Val) | Указывает минуты как целочисленное значение. |
| duration operator «» s(long double Val) | Указывает секунды как значение с плавающей запятой. |
| milliseconds operator «» ms(unsigned long long Val) | Указывает миллисекунды как целочисленное значение. |
| duration operator «» ms(long double Val) | Указывает миллисекунды как значение с плавающей запятой. |
| microseconds operator «» us(unsigned long long Val) | Указывает микросекунды как целочисленное значение. |
| duration operator «» us(long double Val) | Указывает микросекунды как значение с плавающей запятой. |
| nanoseconds operator «» ns(unsigned long long Val) | Указывает наносекунды как целочисленное значение. |
| duration operator «» ns(long double Val) | Указывает наносекунды как значение с плавающей запятой. |
В следующих примерах показано, как использовать литералы:
Операторы
operator+
Оператор сложения для следующих типов:
Возвращаемое значение
1) после преобразования Left и Right в общий тип возвращает значение duration с числом тактов, равным сумме преобразованных счетчиков тактов.
7) возвращает результат сложения года с указанным числом лет.
8) возвращает результат сложения числа месяцев и лет с указанным месяцем и годом.
17) возвращает: ymwdl + dy
Пример: operator+
Унар operator+
Примените унарный плюс к следующим типам:
Возвращаемое значение
operator-
Оператор вычитания для следующих типов:
Возвращаемое значение
6) возвращает разницу в месяцах между Left и Right
8) возвращает число дней между двумя рабочими днями.
9) возвращает year(int(y)-ys.count)())
11) возвращает результат вычитания месяцев или лет из year_month значения.
12) возвращает результат вычитания годовых месяцев из year_month_day значения.
Пример: operator-
Унар operator-
Возвращаемое значение
Возвращает неотрицательную копию *this
Пример: унарный operator-
operator!=
Определяет, следует ли:
1) два duration объекта не представляют одинаковое число тактов.
2) два time_point объекта не представляют один и тот же момент времени.
Параметры
Возвращаемое значение
operator*
Параметры
Mult
Целочисленное значение.
Возвращаемое значение
2) Если is_convertible > is_convertible > указано, эта функция не участвует в разрешении перегрузки. Дополнительные сведения см. в разделе type_traits >.
operator
Параметры
Возвращаемое значение
operator
Параметры
Возвращаемое значение
operator==
Определяет, следует ли:
Параметры
Left
Левый объект для сравнения, например Left == Right
Right
Правый из сравниваемых объектов.
Возвращаемое значение
operator>
Параметры
Возвращаемое значение
operator>=
Параметры
Возвращаемое значение
operator
Параметры
Возвращаемое значение
1)
0 наличии Left == Right
наличии Left
> 0 наличии Left > Right
2)
Эквивалентно: Left.month() Right.month()
Пример: operator
operator
Выводит следующие типы в поток:
Параметры
Traits
Описывает CharT атрибуты для basic_string basic_istream специализации и.
os
Выходной поток, в который выдается day значение.
hms
hh_mm_ss Для вывода.
li
local_info Для вывода.
md
month_day Для вывода.
mdl
month_day_last Для вывода.
mwd
month_weekday Для вывода.
mwdl
month_weekday_last Для вывода.
si
sys_info Для вывода.
wd
weekday Для вывода.
wdi
weekday_indexed Для вывода.
wdl
weekday_last Для вывода.
ym
year_month Для вывода.
ymd
year_month_day Для вывода.
ymdl
year_month_day_last Для вывода.
ymwd
year_month_weekday Для вывода.
ymwdl
year_month_weekday_last Для вывода.
zt
zoned_time Для вывода.
Возвращаемое значение
Переданный поток вывода, os
Комментарии
2) hh_mm_ss значение выводится в виде часов: минуты: секунды: доли секунды. Например, «00:00:05.721 «
15) year_month_weekday выходные данные в формате гггг/месяц/Weekday [Индекс]. Например: 1996/Jan/Wed[1]
16) year_month_weekday_last выходные данные в формате гггг/месяц/будни [Last]. Например: 1996/Jan/Wed[last]
17) tai_time выходные данные в формате гггг-мм-дд чч: мм: СС. ССССССС. Например: 2021-08-13 23:23:08.4358666
18) utc_time выходные данные в формате гггг-мм-дд чч: мм: СС. ССССССС. Например: 2021-08-13 23:23:08.4358666
19) gps_time выходные данные в формате гггг-мм-дд чч: мм: СС. ССССССС. Например: 2021-08-13 23:23:08.4358666
22) в реализации Майкрософт local_info выводится как гггг-мм-дд чч: мм:: СС. СССССС. Например: 2021-09-17 13:55:59.6590120
23) Местное время в zoned_time (получено как zt.get_local_time() ) выводится с использованием часового пояса Format гггг-мм-дд чч: мм: СС. Например: 2021-09-15 10:45:00 GMT-6
Пример: operator
operator modulo
Параметры
Div
Целочисленное значение.
Left
Делимое. Остаток от деления делимого на делитель.
Right
Правый duration объект, делитель.
Возвращаемое значение
operator/ для duration ;
Параметры
Div
Целочисленное значение.
Left \w левый duration объект.
Возвращаемое значение
operator/ для календарных дат
Предоставляет синтаксис для создания календарных дат в следующих формах:
День можно заменить на:
last
weekday[n] за n – й день месяца
weekday[last] за последний weekday месяц.
Частичные даты могут быть сформированы следующим образом:
Целые числа можно использовать, если интерпретация не является неоднозначным.
Параметры
lastspec
Пустой тип тега, указывающий последний элемент в последовательности. Например, 2021y/May/last — это последний день 2021 мая.
mdl
Последний день указанного месяца.
mwd
N-й день недели указанного месяца.
mwdl
Последний день недели указанного месяца.
wdi
Индекс дня недели ( weekday_indexed ). Например, weekday_indexed(Monday, 1) первый понедельник месяца.
wdl
Последний будний день месяца. Например, Monday[last] — это последний понедельник месяца.
Функции
abs(duration)
Синтаксис
Параметры
Period
std::ratio Тип, представляющий отношение секунды к Rep типу источника (т. е. в секундах на Rep ).
Возвращаемое значение
ceil(duration)
Синтаксис
Параметры
Period
std::ratio Тип, представляющий отношение секунды к Rep типу источника (т. е. в секундах на Rep ).
Возвращаемое значение
Комментарии
ceil(time_point)
Синтаксис
Параметры
Возвращаемое значение
Комментарии
clock_cast
Преобразует значение time_point для одного часового эквивалента time_point для другого часов.
Синтаксис
Параметры
Duration
Объект duration SourceClock или, который вы указали.
SourceClock
Тип часов, на котором time_point основывается преобразование.
Возвращаемое значение
Комментарии
current_zone
Возвращает текущий объект часового пояса.
Синтаксис
Возвращаемое значение
duration_cast
Приводит объект duration к указанному целевому duration типу.
Синтаксис
Параметры
Period
std::ratio Тип, представляющий отношение секунды к Rep типу источника (т. е. в секундах на Rep ).
d
Исходный duration объект для приведения к целевому duration типу.
Возвращаемое значение
Комментарии
floor(duration)
Синтаксис
Параметры
Period
std::ratio Тип, представляющий отношение секунды к Rep типу источника (т. е. в секундах на Rep ).
Возвращаемое значение
Комментарии
floor(time_point)
Синтаксис
Параметры
Возвращаемое значение
Комментарии
from_stream
Если анализ завершается неудачей, is.setstate ios_base::failbit вызывается () и выходной параметр не изменяется.
Параметры шаблона
Alloc
Тип, представляющий объект распределителя, который обрабатывает выделение и освобождение памяти в строке.
traits
Описывает charT атрибуты для basic_string basic_istream специализации и.
Rep
Тип внутреннего представления duration типа.
Period
std::ratio Тип, представляющий отношение секунды к Rep типу источника (т. е. в секундах на Rep ).
Duration
duration Тип, используемый для специализации времени.
Параметры
abbrev
Если параметр abbrev не имеет nullptr значение, а описатель формата %Z задан, а синтаксический анализ выполнен успешно, то abbrev содержит Проанализированное значение.
d
Если анализ выполнен успешно, содержит проанализированный день, когда функция возвращает значение.
dur
Объект, duration проанализированный из потока.
ft
Объект, file_time проанализированный из потока.
gt
Объект, gps_time проанализированный из потока.
is
Входной поток для синтаксического анализа.
lt
Объект, local_time проанализированный из потока.
m
Объект, month проанализированный из потока.
md
Объект, month_day проанализированный из потока.
st
Объект, sys_time проанализированный из потока.
tt
Объект, tai_time проанализированный из потока.
ut
Объект, utc_time проанализированный из потока.
wd
Объект, weekday проанализированный из потока.
y
Объект, year проанализированный из потока.
ym
Объект, year_month проанализированный из потока.
ymd
Объект, year_month_day проанализированный из потока.
Возвращаемое значение
Комментарии
7) если используется и успешно проанализирован, это значение будет присвоено, *abbrev Если abbrev не равно null. Если %z (или измененный вариант) используется и успешно проанализирован, это значение будет присвоено, *offset Если offset не равно null.
12) если используется и успешно проанализирован, это значение будет присвоено, *abbrev Если abbrev не равно null. Если %z (или измененный вариант) используется и успешно проанализирован, это значение будет присвоено, *offset Если offset не равно null.
from_stream строки формата
Формат может быть одной из следующих строк:
День недели.
Неделя или день года
Время дня
Месяц
Год на основе ISO 8601 в неделю
В стандарте ISO 8601 недели начинаются с понедельника. Первая неделя года должна включать 4 января и включать первый четверг года.
Общие сведения
Флаги по типу
| Класс | Спецификатор или флаг |
|---|---|
| day | d, e |
| duration | j, H, I, M, S, r, R, T, p, (q, Q только для формата, без синтаксического анализа) |
| file_time | Z, z, c, x, X, D, F, g, G, j, U, V, W, Y, y, C, b, h, B, m, D, e, а, A, U, W, H, T, M, S, r, R, p, |
| gps_time | Z, z, c, x, X, D, F, g, G, j, U, V, W, Y, y, C, b, h, B, m, D, e, а, A, U, W, H, T, M, S, r, R, p, |
| hh_mm_ss | H, I, M, S, r, R, T, p |
| local_time | c, x, X, D, F, g, G, j, U, V, W, Y, y, C, b, h, B, m, D, e, a, а, U, W, H, I, M, S, r, R, T, p |
| local_time_format_t | z, Z, c, x, X, D, F, Y, C, Y, b, B, h, m, D, e, a, а, u, w, H, I, M, S, r, R, T, p, g, G, U, V, W |
| local_info | z, Z |
| month | b, h, B, m |
| month_day | B, d, j, e, b, h, m |
| month_day_last | B, d, j, e, b, h, m |
| month_weekday | b, B, h, m, a, а, u, w |
| month_weekday_last | b, B, h, m, a, а, u, w |
| sys_info | z, Z |
| sys_time | Z, z, c, x, X, D, F, g, G, j, U, V, W, Y, y, C, b, h, B, m, D, e, а, A, U, W, H, T, M, S, r, R, p, |
| tai | Z, z, c, x, X, D, F, g, G, j, U, V, W, Y, y, C, b, h, B, m, D, e, а, A, U, W, H, T, M, S, r, R, p, |
| utc_time | Z, z, c, x, X, D, F, g, G, j, U, V, W, Y, y, C, b, h, B, m, D, e, а, A, U, W, H, T, M, S, r, R, p, |
| weekday | а, A, u, w |
| weekday_indexed | а, A, u, w |
| weekday_last | а, A, u, w |
| year | Y, y, C |
| year_month | Y, y, B, g, G, h, C, B, m |
| year_month_day | D, F, g, G, j, U, V, W, Y, y, C, b, h, B, m, d, e, a, A, U, W |
| year_month_day_last | D, F, g, G, j, U, V, W, Y, y, C, b, h, B, m, d, e, a, A, U, W |
| year_month_weekday | D, F, g, G, j, U, V, W, Y, y, C, b, h, B, m, d, e, a, A, U, W |
| year_month_weekday_last | D, F, g, G, j, U, V, W, Y, y, C, b, h, B, m, d, e, a, A, U, W |
| zoned_time | z, Z, c, x, X, D, F, Y, C, Y, b, B, h, m, D, e, a, а, u, w, H, I, M, S, r, R, T, p, g, G, U, V, W |
get_leap_second_info
Возвращает объект в leap_second_info течение указанного времени. Это предоставляет сведения о том, возникает ли предоставленное время во время вставки с помощью LEAP-секундного времени. Он также предоставляет число високосных секунд, которые были добавлены между 1 января 1970 и указанным временем. Посекундная Вставка, когда служба межязыкового вращения и справочной системы (ИЕРС) объявляет, что будет добавлена LEAP-секунда (в течение 61 секунды), чтобы учитывать разницу между атомарным временем и временем, которые отписываются путем измерения поворота земли, что является неравномерным и постепенно снижает скорость.
Синтаксис
Параметры
Возвращаемое значение
get_tzdb
Возвращает первую запись в списке базы данных часового пояса для всей программы.
Синтаксис
Возвращаемое значение
Комментарии
Если он еще не инициализирован, get_tzdb инициализирует базу данных часового пояса для всей программы при первом доступе. При инициализации база данных tzdb_list содержит один инициализированный tzdb объект.
get_tzdb_list
Получает одноэлементную базу данных часового пояса для всей программы.
Синтаксис
Возвращаемое значение
Комментарии
Если он еще не инициализирован, get_tzdb_list инициализирует базу данных часового пояса для всей программы при первом доступе. При инициализации база данных tzdb_list содержит один инициализированный tzdb объект. get_tzdb_list Функция является потокобезопасной.
is_am
Предикат, определяющий, является ли указанный час частью дня ( накопительный-меридием (AM)).
Синтаксис
Параметры
h
Представление источника hours в 24-часовом формате времени.
Возвращаемое значение
is_pm
Предикат, определяющий, находится ли указанный час в части дня, выступающей после меридием (PM).
Синтаксис
Параметры
h
Представление источника hours в 24-часовом формате времени.
Возвращаемое значение
locate_zone
Возвращает объект часового пояса, указанный по имени часового пояса.
Синтаксис
Параметры
tz_name
Имя возвращаемого часового пояса.
Возвращаемое значение
Комментарии
Если он еще не инициализирован, locate_zone инициализирует базу данных часового пояса для всей программы при первом доступе. При инициализации база данных tzdb_list содержит один инициализированный tzdb объект.
make12
Возвращает указанный час в 12-часовом формате времени.
Синтаксис
Параметры
h
Представление источника hours в 24-часовом формате времени.
Возвращаемое значение
make24
Возвращает указанный час в 24-часовом формате времени.
Синтаксис
Параметры
h
Представление источника hours в 12-часовом формате времени.
is_pm
Исходное hours представление — PM (if true ) или AM (если false ).
Возвращаемое значение
reload_tzdb
Перезагружает базу данных часового пояса, если доступна обновленная информация.
Синтаксис
Возвращаемое значение
Комментарии
remote_version
Возвращает строку, содержащую последнюю версию удаленной базы данных.
Синтаксис
Возвращаемое значение
round(duration)
Округляет указанное значение duration до ближайшего представления duration в целевом типе.
Синтаксис
Параметры
Period
std::ratio Тип, представляющий отношение секунды к Rep типу источника (т. е. в секундах на Rep ).
Возвращаемое значение
Комментарии
round(time_point)
Возвращает ближайшую точку во времени, представленную в целевом объекте, duration в указанную точку времени.
Параметры
Возвращаемое значение
Комментарии
time_point_cast
Приводит time_point объект к time_point типу, имеющему другой duration тип.
Синтаксис
Параметры
tp
time_point Объект, который необходимо привести к ToDuration типу.




