clock_time_conversion 结构

一种特征,指定如何在保持等效时间点的同时,将 time_point 从一种类型的时钟转换为另一种类型。

语法

// C++20
1) template<class Dest, class Source> struct clock_time_conversion {};
2) template<class Clock> struct clock_time_conversion<Clock, Clock>;
3) template<> struct clock_time_conversion<system_clock, system_clock>;
4) template<> struct clock_time_conversion<utc_clock, utc_clock>;
5) template<> struct clock_time_conversion<system_clock, utc_clock>;
6) template<> struct clock_time_conversion<utc_clock, system_clock>;
7) template<class Clock> struct clock_time_conversion<Clock, system_clock>;
8) template<class Clock> struct clock_time_conversion<system_clock, Clock>;
9) template<class Clock> struct clock_time_conversion<Clock, utc_clock>;
10) template<class Clock> struct clock_time_conversion<utc_clock, Clock>;

模板参数

Clock
要转换/转换为的时钟类型。

Dest
要转换为的时钟类型。

Source
要转换的时钟类型。

特征提供以下转换:

1) 一个空结构,仅为实现专用化而定义。
2-4) 标识转换。 返回传入的同一时钟。
5-6) 在 sys_timeutc_time 之间转换,调用 utc_clock::to_sysutc_clock::from_sys,具体取决于转换的方向。
7-8) 在 sys_time 和指定时钟之间转换(指定时钟支持 to_sysfrom_sys 时),导致对 Clock::to_sysClock::from_sys 的调用,具体取决于转换的方向。
9-10) 在utc_time指定的时钟支持to_sysfrom_utc和指定时钟之间转换时,会根据转换的方向调用Clock::to_utcClock::from_utc转换。

成员

名称 描述
operator () time_point 从一个时钟转换为另一个时钟。

注解

通常不会直接在代码中使用此特征。 clock_cast 转换函数使用此特征。

要求

标头<chrono>:

命名空间std::chrono

编译器选项: /std:c++latest

operator()

在保持等效时间点的同时,将 time_point 从一种时钟类型转换为另一种时钟类型。

语法

1)
template <class Duration>
time_point<Clock, Duration> operator()(const time_point<Clock, Duration>& t) const;

2)
template <class Duration>
sys_time<Duration> operator()(const sys_time<Duration> & t) const;

3)
template <class Duration>
utc_time<Duration> operator()(const utc_time<Duration>& t) const;

4)
template <class Duration>
sys_time<Duration> operator()(const utc_time<Duration>& t) const;

5)
template <class Duration>
utc_time<Duration> operator()(const sys_time<Duration>& t) const;

参数

t 要转换的 time_point

返回值

1-3) 标识转换。 不进行转换。 返回 t,不进行任何更改。
4) 返回 utc_clock::to_sys(t)
5) 返回 utc_clock::from_sys(t)

推导指南

针对 template <class Duration> operator() 提供以下推导指南:

1)
template <class Duration> auto operator()(const sys_time<Duration>& t) const
    -> decltype(Clock::from_sys(t));

2)
template <class Duration> auto operator()(const time_point<SourceClock, Duration>& t) const
    -> decltype(Clock::to_sys(t));

3)
template <class Duration> auto operator()(const utc_time<Duration>& t) const
    -> decltype(Clock::from_utc(t));

4)
template <class Duration> auto operator()(const time_point<Clock, Duration>& t) const
    -> decltype(Clock::to_utc(t));

1) 仅当 Clock 支持 from_sys() 并返回 time_point<Clock, Duration> 时,参与重载决策。
2) 仅当 Clock 支持 to_sys() 并返回 sys_time<Duration> 时,参与重载决策。
3) 仅当 Clock 支持 from_utc() 并返回 time_point<Clock, Duration> 时,参与重载决策。
4) 仅当 Clock 支持 to_utc() 并返回 utc_time<Duration> 时,参与重载决策。

示例: clock_time_conversion

#include <iostream>
#include <chrono>

using namespace std::chrono;

int main()
{
    auto sd = sys_days{ 2021y / July / 26 };
    auto time = clock_time_conversion<utc_clock, system_clock>{}(sd);
    std::cout << time << "\n";
    return 0;
}
2021-07-26 00:00:00

另请参阅

<chrono>
clock_cast
头文件引用