C++ 参考手册

位置:首页 > C++ 参考手册 >日期和时间工具 > std::chrono::clock_time_conversion

std::chrono::clock_time_conversion 是特性类,指定如何转换 Source 时钟的 std::chrono::time_pointDest 时钟的时间点。它通过提供 const 可调用的,接受 std::chrono::time_point<Source, Duration> 类型参数并返回表示等价时间点的 std::chrono::time_point<Dest, OtherDuration>operator() 进行转换。以对每个特化有所变化的方式,计算返回时间点的时长。通常只通过 std::chrono::clock_cast 间接使用 clock_time_conversion

程序可以特化 clock_time_conversion ,若至少一个模板形参是用户定义类型。

初等模板是空 struct 。标准定义下列特化:

template<class Clock> struct clock_time_conversion<Clock, Clock>;
(1) (C++20 起)
template<> struct clock_time_conversion<std::chrono::system_clock, std::chrono::system_clock>;
(2) (C++20 起)
template<> struct clock_time_conversion<std::chrono::utc_clock, std::chrono::utc_clock>;
(3) (C++20 起)
template<> struct clock_time_conversion<std::chrono::system_clock, std::chrono::utc_clock>;
(4) (C++20 起)
template<> struct clock_time_conversion<std::chrono::utc_clock, std::chrono::system_clock>;
(5) (C++20 起)
template<class Clock> struct clock_time_conversion<Clock, std::chrono::system_clock>;
(6) (C++20 起)
template<class Clock> struct clock_time_conversion<std::chrono::system_clock, Clock>;
(7) (C++20 起)
template<class Clock> struct clock_time_conversion<Clock, std::chrono::utc_clock>;
(8) (C++20 起)
template<class Clock> struct clock_time_conversion<std::chrono::utc_clock, Clock>;
(9) (C++20 起)
1-3) 恒等转换: operator() 返回参数的副本。
4-5) std::chrono::sys_timestd::chrono::utc_time 间的转换: operator() 分别调用 std::chrono::utc_clock::to_sysstd::chrono::utc_clock::from_sys
6-7) Clock 支持 from_systo_sys 时,来自和到 std::chrono::sys_time 的转换: operator() 分别调用 Clock::to_sysClock::from_sys
8-9) Clock 支持 from_utcto_utc 时,来自和到 std::chrono::utc_time 的转换: operator() 分别调用 Clock::to_utcClock::from_utc

成员函数

每个特化都有隐式声明的默认构造函数、复制构造函数、移动构造函数、复制赋值运算符、移动赋值运算符和析构函数。

std::chrono::clock_time_conversion::operator()

template <class Duration>

std::chrono::time_point<Clock, Duration>

    operator()(const std::chrono::time_point<Clock, Duration>& t) const;
(1) (特化 (1) 的成员)
template <class Duration>

std::chrono::sys_time<Duration>

    operator()(const std::chrono::sys_time<Duration> & t) const;
(2) (特化 (2) 的成员)
template <class Duration>

std::chrono::utc_time<Duration>

    operator()(const std::chrono::utc_time<Duration>& t) const;
(3) (特化 (3) 的成员)
template <class Duration>

std::chrono::sys_time<Duration>

    operator()(const std::chrono::utc_time<Duration>& t) const;
(4) (特化 (4) 的成员)
template <class Duration>

std::chrono::utc_time<Duration>

    operator()(const std::chrono::sys_time<Duration>& t) const;
(5) (特化 (5) 的成员)
template <class Duration>

auto operator()(const std::chrono::sys_time<Duration>& t) const

    -> decltype(Clock::from_sys(t));
(6) (特化 (6) 的成员)
template <class Duration>

auto operator()(const std::chrono::time_point<SourceClock, Duration>& t) const

    -> decltype(Clock::to_sys(t));
(7) (特化 (7) 的成员)
template <class Duration>

auto operator()(const std::chrono::utc_time<Duration>& t) const

        -> decltype(Clock::from_utc(t));
(8) (特化 (8) 的成员)
template <class Duration>

auto operator()(const std::chrono::time_point<Clock, Duration>& t) const

        -> decltype(Clock::to_utc(t));
(9) (特化 (9) 的成员)

转换参数 std::chrono::time_point 为目标时钟。

1-3) 恒等转换。返回不更改的 t
4) 返回 std::chrono::utc_clock::to_sys(t)
5) 返回 std::chrono::utc_clock::from_sys(t)
6) 返回 Clock::from_sys(t) 。此重载仅若表达式 Clock::from_sys(t) 为良式才参与重载决议。若 Clock::from_sys(t) 不返回 std::chrono::time_point<Clock, Duration> ,其中 Durationstd::chrono::duration 的某个合法特化,则程序为病式。
7) 返回 Clock::to_sys(t) 。此重载仅若表达式 Clock::to_sys(t) 为良式才参与重载决议。若 Clock::to_sys(t) 不返回 std::chrono::sys_time<Duration> ,其中 Durationstd::chrono::duration 的某个合法特化,则程序为病式。
8) Returns Clock::from_utc(t) 。此重载仅若表达式 Clock::from_utc(t) 为良式才参与重载决议。若 Clock::from_utc(t)不返回 std::chrono::time_point<Clock, Duration> ,其中 Durationstd::chrono::duration 的某个合法特化,则程序为病式。
9) 返回 Clock::to_utc(t) 。此重载仅若表达式 Clock::to_utc(t) 为良式才参与重载决议。若 Clock::to_utc(t) 不返回 std::chrono::utc_time<Duration> ,其中 Durationstd::chrono::duration 的某个合法特化,则程序为病式。

参数

t - 要转化的时间点

返回值

上述的转换结果:

1-3) t
4) std::chrono::utc_clock::to_sys(t)
5) std::chrono::utc_clock::from_sys(t)
6) Clock::from_sys(t)
7) Clock::to_sys(t)
8) Clock::from_utc(t)
9) Clock::to_utc(t)

参阅

转换一个时钟的时间点为另一个
(函数模板)