Spec-Zone.ru › C++

std::chrono::time_point

Определён в заголовочном файле <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(начиная с C++20).

(до C++23)

Типы-члены

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

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

(конструктор)
создаёт новый момент времени
(открытая функция-член)
time_since_epoch
возвращает момент времени в виде длительности, прошедшей с начала эпохи его часов
(открытая функция-член)
operator+=operator-=
изменяет момент времени на заданную длительность
(открытая функция-член)
operator++operator++(int)operator--operator--(int)
(C++20)
увеличивает или уменьшает длительность
(открытая функция-член)
min
[статическая]
возвращает момент времени, соответствующий наименьшей длительности
(открытая статическая функция-член)
max
[статическая]
возвращает момент времени, соответствующий наибольшей длительности
(открытая статическая функция-член)

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

operator+operator-
(C++11)
выполняет сложение и вычитание с участием момента времени
(шаблон функции)
operator==operator!=operator<operator<=operator>operator>=operator<=>
(C++11)(C++11)(удалён в C++20)(C++11)(C++11)(C++11)(C++11)(C++20)
сравнивает два момента времени
(шаблон функции)
time_point_cast
(C++11)
преобразует момент времени в другой момент времени по тем же часам, но с другой длительностью
(шаблон функции)
floor(std::chrono::time_point)
(C++17)
преобразует один момент времени в другой, округляя вниз
(шаблон функции)
ceil(std::chrono::time_point)
(C++17)
преобразует один момент времени в другой, округляя вверх
(шаблон функции)
round(std::chrono::time_point)
(C++17)
преобразует один момент времени в другой, округляя до ближайшего значения; при равенстве выбирает чётное значение
(шаблон функции)

Вспомогательные классы

std::common_type<std::chrono::time_point>
(C++11)
специализирует признак std::common_type
(частичная специализация шаблона класса)
std::hash<std::chrono::time_point>
(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.

См. также

duration
(C++11)
интервал времени
(шаблон класса)
year_month_day
(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

Spec-Zone.ru

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