std::chrono::time_point
Определён в заголовочном файле <chrono> | ||
|---|---|---|
template<
class Clock,
class Duration = typename Clock::duration
> class time_point;
| (начиная с C++11) |
Шаблон класса std::chrono::time_point представляет момент времени. Он реализован так, как если бы хранил значение типа Duration, обозначающее интервал времени, прошедший с начала эпохи Clock.
|
| (до C++23) |
Типы-члены
| Тип | Описание |
|---|---|
Clock clock | часы, по которым измеряется этот момент времени (псевдоним типа) |
Duration duration | тип std::chrono::duration, используемый для измерения времени, прошедшего с начала эпохи (псевдоним типа) |
duration::rep rep | арифметический тип, представляющий количество тактов длительности (псевдоним типа) |
duration::period period | тип std::ratio, представляющий период такта длительности (псевдоним типа) |
Функции-члены
| создаёт новый момент времени (открытая функция-член) |
|
| возвращает момент времени в виде длительности, прошедшей с начала эпохи его часов (открытая функция-член) |
|
| изменяет момент времени на заданную длительность (открытая функция-член) |
|
|
(C++20) | увеличивает или уменьшает длительность (открытая функция-член) |
|
[статическая] | возвращает момент времени, соответствующий наименьшей длительности (открытая статическая функция-член) |
|
[статическая] | возвращает момент времени, соответствующий наибольшей длительности (открытая статическая функция-член) |
Функции, не являющиеся членами
|
(C++11) | выполняет сложение и вычитание с участием момента времени (шаблон функции) |
|
(C++11)(C++11)(удалён в C++20)(C++11)(C++11)(C++11)(C++11)(C++20) | сравнивает два момента времени (шаблон функции) |
|
(C++11) | преобразует момент времени в другой момент времени по тем же часам, но с другой длительностью (шаблон функции) |
|
(C++17) | преобразует один момент времени в другой, округляя вниз (шаблон функции) |
|
(C++17) | преобразует один момент времени в другой, округляя вверх (шаблон функции) |
|
(C++17) | преобразует один момент времени в другой, округляя до ближайшего значения; при равенстве выбирает чётное значение (шаблон функции) |
Вспомогательные классы
|
(C++11) | специализирует признак std::common_type (частичная специализация шаблона класса) |
|
(C++26) | поддержка хеширования для std::chrono::time_point (частичная специализация шаблона класса) |
Пример
#include <algorithm>
#include <chrono>
#include <ctime>
#include <iomanip>
#include <iostream>
void slow_motion()
{
static int a[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
// Generate Γ(13) == 12! permutations:
while (std::ranges::next_permutation(a).found) {}
}
int main()
{
using namespace std::literals; // enables literal suffixes, e.g. 24h, 1ms, 1s.
const std::chrono::time_point<std::chrono::system_clock> now =
std::chrono::system_clock::now();
const std::time_t t_c = std::chrono::system_clock::to_time_t(now - 24h);
std::cout << "24 hours ago, the time was "
<< 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 << "Different clocks are not comparable: \n"
" System time: " << now.time_since_epoch() << "\n"
" Steady time: " << start.time_since_epoch() << '\n';
slow_motion();
const auto end = std::chrono::steady_clock::now();
std::cout
<< "Slow calculations took "
<< std::chrono::duration_cast<std::chrono::microseconds>(end - start) << " ≈ "
<< (end - start) / 1ms << "ms ≈ " // almost equivalent form of the above, but
<< (end - start) / 1s << "s.\n"; // using milliseconds and seconds accordingly
}
Возможный вывод:
24 hours ago, the time was 2021-02-15 18:28:52. Different clocks are not comparable: System time: 1666497022681282572ns Steady time: 413668317434475ns Slow calculations took 2090448µs ≈ 2090ms ≈ 2s.
См. также
|
(C++11) | интервал времени (шаблон класса) |
|
(C++20) | представляет конкретные year, month и day (класс) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/chrono/time_point