Namespaces
Variants

std::chrono:: time_point

From cppreference.net
Определено в заголовочном файле <chrono>
template <

class Clock,
class Duration = typename Clock :: duration

> class time_point ;
(начиная с C++11)

Шаблон класса std::chrono::time_point представляет точку во времени. Он реализован таким образом, как если бы хранил значение типа Duration , указывающее временной интервал от начала эпохи Clock .

Clock должен удовлетворять требованиям для Clock или быть std::chrono::local_t (since C++20) .

(until C++23)

Содержание

Типы членов

Тип Описание
Clock clock
часы, на которых измеряется данная временная точка
(typedef)
Duration duration
тип std::chrono::duration используемый для измерения времени с начала эпохи
(typedef)
duration::rep rep
арифметический тип, представляющий количество тиков длительности
(typedef)
duration::period period
тип std::ratio представляющий период тика длительности
(typedef)

Функции-члены

создает новую точку времени
(публичная функция-член)
возвращает точку времени как длительность с начала эпохи своих часов
(публичная функция-член)
модифицирует точку времени на заданную длительность
(публичная функция-член)
увеличивает или уменьшает длительность
(публичная функция-член)
[static]
возвращает точку времени, соответствующую наименьшей длительности
(публичная статическая функция-член)
[static]
возвращает точку времени, соответствующую наибольшей длительности
(публичная статическая функция-член)

Функции, не являющиеся членами класса

выполняет операции сложения и вычитания с участием точки времени
(шаблон функции)
(C++11) (C++11) (удалён в C++20) (C++11) (C++11) (C++11) (C++11) (C++20)
сравнивает две точки времени
(шаблон функции)
преобразует точку времени в другую точку времени на тех же часах, с другой длительностью
(шаблон функции)
преобразует 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()
{
    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 часа назад время было "
              << 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();
    const auto end = std::chrono::steady_clock::now();
    std::cout
        << "Медленные вычисления заняли "
        << std::chrono::duration_cast<std::chrono::microseconds>(end - start) << " ≈ "
        << (end - start) / 1ms << "мс ≈ " // almost equivalent form of the above, but
        << (end - start) / 1s << "с.\n";  // using milliseconds and seconds accordingly
}

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

24 часа назад время было 2021-02-15 18:28:52.
Разные часы несравнимы:
  Системное время: 1666497022681282572ns
  Монотонное время: 413668317434475ns
Медленные вычисления заняли 2090448µs ≈ 2090мс ≈ 2с.

Смотрите также

(C++11)
временной интервал
(шаблон класса)
представляет конкретный year , month и day
(класс)