定义于头文件 <chrono>
template<class Clock, class Duration =
typename Clock::duration> class time_point;
类模板 std::chrono::time_point
表示时间中的一个点。它被实现成如同存储一个 Duration
类型的自 Clock
的纪元起始开始的时间间隔的值。
Clock
必须满足时钟 (Clock) 的要求或为 std::chrono::local_t (C++20 起)。
成员类型
成员类型 | 定义 |
clock | Clock ,此时间点在此时钟上计量 |
duration | Duration ,用于计量从纪元起时间的 std::chrono::duration 类型 |
rep | Rep ,表示时期的计次数的算术类型 |
period | Period ,表示时期周期的 std::ratio 类型 |
构造函数
std::chrono::time_point<Clock,Duration>::time_point
time_point(); (C++11 起) (C++14 前)
constexpr time_point(); (C++14 起)
explicit time_point( const duration& d ); (C++11 起) (C++14 前)
constexpr explicit time_point( const duration& d ); (C++14 起)
template< class Duration2 > time_point(
const time_point<Clock,Duration2>& t ); (C++11 起) (C++14 前)
template< class Duration2 >
constexpr time_point( const time_point<Clock,Duration2>& t ); (C++14 起)
从数个可选数据源之一构造新的 time_point
。
1) 默认构造函数,创建表示 Clock
的纪元(即 time_since_epoch() 为零)的 time_point
。
2) 构造位于 Clock
的纪元加上 d
的 time_point
。
3) 通过转换 t
为 duration
构造 time_point
。此构造函数仅若 Duration2
可隐式转换为 duration
才参与重载决议。
参数
d | - | 复制来源的 duration |
t | - | 转换来源的 time_point |
调用示例
#include <chrono>
#include <iostream>
using Clock = std::chrono::high_resolution_clock;
using TimePoint = std::chrono::time_point<Clock>;
void print_ms(const TimePoint& point)
{
using Ms = std::chrono::milliseconds;
const Clock::duration since_epoch = point.time_since_epoch();
std::cout << std::chrono::duration_cast<Ms>(since_epoch).count() << " ms\n";
}
int main()
{
const TimePoint default_value = TimePoint(); // (1)
print_ms(default_value); // 0 ms
const Clock::duration duration_4_seconds = std::chrono::seconds(4);
const TimePoint time_point_4_seconds(duration_4_seconds); // (2)
// 从纪元开始 4 秒
print_ms(time_point_4_seconds); // 4000 ms
const TimePoint time_point_now = Clock::now(); // (3)
print_ms(time_point_now); // 43098276 ms
}
返回表示为从其时钟起点开始的时间点
std::chrono::time_point<Clock,Duration>::time_since_epoch
duration time_since_epoch() const; | (C++11 起) (C++14 前) | |
constexpr duration time_since_epoch() const; | (C++14 起) |
返回表示 *this 与 clock
的纪元间的时间量的 duration 。
参数
(无)
返回值
此 time_point
与 clock
的纪元间的时间量
调用示例
#include <iostream>
#include <chrono>
#include <ctime>
int main()
{
auto p0 = std::chrono::time_point<std::chrono::system_clock>{};
auto p1 = std::chrono::system_clock::now();
auto p2 = p1 - std::chrono::hours(24);
auto epoch_time = std::chrono::system_clock::to_time_t(p0);
std::cout << "epoch: " << std::ctime(&epoch_time);
auto today_time = std::chrono::system_clock::to_time_t(p1);
std::cout << "today: " << std::ctime(&today_time);
std::cout << "hours since epoch: "
<< std::chrono::duration_cast<std::chrono::hours>(
p1.time_since_epoch()).count()
<< '\n';
std::cout << "yesterday, hours since epoch: "
<< std::chrono::duration_cast<std::chrono::hours>(
p2.time_since_epoch()).count()
<< '\n';
}
输出
以给定的 duration 修改 time_point
std::chrono::time_point<Clock,Duration>::operator+, operator-
time_point& operator+=( const duration& d ); | (1) | (C++17 前) | |
constexpr time_point& operator+=( const duration& d ); | (C++17 起) | ||
time_point& operator-=( const duration& d ); | (2) | (C++17 前) | |
constexpr time_point& operator-=( const duration& d ); | (C++17 起) |
以指定的时长修改时间点。
1) 应用偏移 d
到 pt
。等效地以 d_ += d 将 d
加到内部存储的 duration 。
2) 以负方向应用偏移 d
到 pt
。等效地以 d_ -= d 从内部存储的 duration d_
减去 d
。
参数
d | - | 要应用的时间偏移 |
返回值
*this 。
异常
(无)
调用示例
#include <iostream>
#include <chrono>
#include <ctime>
int main()
{
auto p1 = std::chrono::system_clock::now();
auto today_time = std::chrono::system_clock::to_time_t(p1);
std::cout << "now(): " << std::ctime(&today_time);
auto p2 = p1;
p2 += std::chrono::hours(24);
today_time = std::chrono::system_clock::to_time_t(p2);
std::cout << "now() + hours(24) : " << std::ctime(&today_time);
auto p3 = p1;
p3 -= std::chrono::hours(24);
today_time = std::chrono::system_clock::to_time_t(p3);
std::cout << "now() - hours(24) : " << std::ctime(&today_time);
}