std::chrono::time_point
Материал из cppreference.com
Определено в заголовочном файле <chrono> | ||
template< class Clock, | (начиная с C++11) | |
Шаблонный класс std::chrono::time_point
представляет момент во времени. Реализован так, как если бы он хранил значение типа Duration
, указывающее временной интервал от начала эпохи Clock
.
| (до C++23) |
Содержание |
[править]Типы-элементы
Тип элемент | Определение |
clock | Clock , часы, которыми измеряется этот момент времени |
duration | Duration , тип std::chrono::duration используемый для измерения времени, прошедшего с начала эпохи |
rep | Rep , арифметический тип, представляющий количество тиков длительности |
period | Period , тип std::ratio, представляющий период длительности в тиках |
[править]Функции-элементы
конструирует новый момент времени (public функция-элемент) | |
возвращает момент времени как длительность с момента старта его часов (public функция-элемент) | |
изменяет момент времени на указанную длительность (public функция-элемент) | |
увеличивает или уменьшает длительность (public функция-элемент) | |
[static] | возвращает момент времени, соответствующий наименьшей длительности (public static функция-элемент) |
[static] | возвращает момент времени, соответствующий наибольшей длительности (public static функция-элемент) |
[править]Функции, не являющиеся элементами
(C++11) | выполняет операции сложения и вычитания, связанные с моментом времени (шаблон функции) |
(C++11)(C++11)(удалено в C++20)(C++11)(C++11)(C++11)(C++11)(C++20) | сравнивает два момента времени (шаблон функции) |
(C++11) | преобразует момент времени в другой момент времени на тех же часах с другой длительностью (шаблон функции) |
преобразует time_point в другой, округляя в меньшую сторону (шаблон функции) | |
преобразует time_point в другой, округляя в большую сторону (шаблон функции) | |
преобразует time_point в другой, округляя до ближайшего, или до чётного в промежуточных случаях (шаблон функции) |
[править]Вспомогательные классы
специализация свойства std::common_type (специализация шаблона класса) | |
поддержка хэширования для std::chrono::time_point (специализация шаблона класса) |
[править]Пример
Запустить этот код
#include <algorithm>#include <chrono>#include <ctime>#include <iomanip>#include <iostream> void slow_motion(){staticint a[]{1,2,3,4,5,6,7,8,9,10,11,12};// Генерирует Γ(13) == 12! перестановок:while(std::ranges::next_permutation(a).found){}} int main(){usingnamespace std::literals;// позволяет буквальные суффиксы, например// 24h, 1ms, 1s.const std::chrono::time_point<std::chrono::system_clock> now =std::chrono::system_clock::now(); conststd::time_t t_c =std::chrono::system_clock::to_time_t(now - 24h);std::cout<<"24 часа назад время было "<<std::put_time(std::localtime(&t_c), "%F %T.\n")<<std::flush; const std::chrono::time_point<std::chrono::steady_clock> start =std::chrono::steady_clock::now(); std::cout<<"Разные часы несопоставимы: \n"<<" Системное время: "<< now.time_since_epoch()<<"\n"<<" Стабильное время: "<< start.time_since_epoch()<<"\n"; slow_motion(); constauto end =std::chrono::steady_clock::now();std::cout<<"Медленные расчёты заняли "<<std::chrono::duration_cast<std::chrono::microseconds>(end - start).count()<<"мкс ≈ "<<(end - start)/ 1ms <<"мс ≈ "// почти эквивалентная форма, приведённого выше,<<(end - start)/ 1s <<"с.\n";// но с использованием миллисекунд и секунд// соответственно}
Возможный вывод:
24 часа назад время было 2021-02-15 18:28:52. Разные часы несопоставимы: Системное время: 1666497022681282572нс Стабильное время: 413668317434475нс Медленные расчёты заняли 2090448мкс ≈ 2090мс ≈ 2с.
[править]Смотрите также
(C++11) | временной интервал (шаблон класса) |
(C++20) | представляет конкретный год, месяц и день (класс) |