std::chrono::clock_time_conversion

来自cppreference.com
< cpp‎ | chrono
 
 
工具库
通用工具
日期和时间
函数对象
格式化库 (C++20)
(C++11)
关系运算符 (C++20 中弃用)
整数比较函数
(C++20)(C++20)(C++20)
(C++20)
swap 与类型运算
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
常用词汇类型
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
初等字符串转换
(C++17)
(C++17)
 
日期和时间工具
时间点
(C++11)
clock_time_conversion
(C++20)
(C++20)
时长
(C++11)
时钟
(C++11)      
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
当天时刻
(C++20)(C++20)
(C++20)(C++20)
(C++20)

日历
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)(C++20)
时区
(C++20)
(C++20)
(C++20)
chrono I/O
(C++20)
C 风格日期和时间
 
在标头 <chrono> 定义
template<class Dest, class Source> struct clock_time_conversion { };
(C++20 起)

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)

参阅

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