std::chrono::clock_time_conversion

From cppreference.com
< cpp‎ | chrono
 
 
Utilities library
General utilities
Date and time
Function objects
Formatting library (C++20)
(C++11)
Relational operators (deprecated in C++20)
Integer comparison functions
(C++20)(C++20)(C++20)   
(C++20)
Swap and type operations
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Common vocabulary types
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
Elementary string conversions
(C++17)
(C++17)
 
Date and time utilities
Time point
(C++11)
clock_time_conversion
(C++20)
(C++20)
Duration
(C++11)
Clocks
(C++11)      
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
Time of day
(C++20)(C++20)
(C++20)(C++20)
(C++20)

Calendars
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)(C++20)
Time zones
(C++20)
(C++20)
(C++20)
chrono I/O
(C++20)
C-style date and time
 
Defined in header <chrono>
template< class Dest, class Source >
struct clock_time_conversion { };
(since C++20)

std::chrono::clock_time_conversion is a trait that specifies how to convert a std::chrono::time_point of the Source clock to that of the Dest clock. It does so by providing a const-callable operator() that accepts an argument of type std::chrono::time_point<Source, Duration> and returns a std::chrono::time_point<Dest, OtherDuration> that represents an equivalent point in time. The duration of the returned time point is computed from the source duration in a manner that varies for each specialization. clock_time_conversion is normally only used indirectly, via std::chrono::clock_cast.

A program may specialize clock_time_conversion if at least one of the template parameters is a user-defined clock type.

The primary template is an empty struct. The standard defines the following specializations:

template< class Clock >
struct clock_time_conversion<Clock, Clock>;
(1) (since C++20)
template<>
struct clock_time_conversion<std::chrono::system_clock, std::chrono::system_clock>;
(2) (since C++20)
template<>
struct clock_time_conversion<std::chrono::utc_clock, std::chrono::utc_clock>;
(3) (since C++20)
template<>
struct clock_time_conversion<std::chrono::system_clock, std::chrono::utc_clock>;
(4) (since C++20)
template<>
struct clock_time_conversion<std::chrono::utc_clock, std::chrono::system_clock>;
(5) (since C++20)
template< class Clock >
struct clock_time_conversion<Clock, std::chrono::system_clock>;
(6) (since C++20)
template< class Clock >
struct clock_time_conversion<std::chrono::system_clock, Clock>;
(7) (since C++20)
template< class Clock >
struct clock_time_conversion<Clock, std::chrono::utc_clock>;
(8) (since C++20)
template< class Clock >
struct clock_time_conversion<std::chrono::utc_clock, Clock>;
(9) (since C++20)
1-3) Identity conversion: operator() returns a copy of the argument.
4-5) Conversions between std::chrono::sys_time and std::chrono::utc_time: operator() calls std::chrono::utc_clock::to_sys and std::chrono::utc_clock::from_sys, respectively.
6-7) Conversions to and from std::chrono::sys_time when Clock supports from_sys and to_sys: operator() calls Clock::to_sys and Clock::from_sys, respectively.
8-9) Conversions to and from std::chrono::utc_time when Clock supports from_utc and to_utc: operator() calls Clock::to_utc and Clock::from_utc, respectively.

Member functions

Each specialization has an implicitly-declared default constructor, copy constructor, move constructor, copy assignment operator, move assignment operator, and destructor.

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) (member of specialization (1))
template< class Duration >

std::chrono::sys_time<Duration>

    operator()( const std::chrono::sys_time<Duration> & t ) const;
(2) (member of specialization (2))
template< class Duration >

std::chrono::utc_time<Duration>

    operator()( const std::chrono::utc_time<Duration>& t ) const;
(3) (member of specialization (3))
template< class Duration >

std::chrono::sys_time<Duration>

    operator()( const std::chrono::utc_time<Duration>& t ) const;
(4) (member of specialization (4))
template< class Duration >

std::chrono::utc_time<Duration>

    operator()( const std::chrono::sys_time<Duration>& t ) const;
(5) (member of specialization (5))
template< class Duration >

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

    -> decltype(Clock::from_sys(t));
(6) (member of specialization (6))
template< class Duration >

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

    -> decltype(Clock::to_sys(t));
(7) (member of specialization (7))
template< class Duration >

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

        -> decltype(Clock::from_utc(t));
(8) (member of specialization (8))
template< class Duration >

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

        -> decltype(Clock::to_utc(t));
(9) (member of specialization (9))

Converts the argument std::chrono::time_point to the destination clock.

1-3) Identity conversion. Returns t unchanged.
6) Returns Clock::from_sys(t). This overload participates in overload resolution only if the expression Clock::from_sys(t) is well-formed. The program is ill-formed if Clock::from_sys(t) does not return std::chrono::time_point<Clock, Duration> where Duration is some valid specialization of std::chrono::duration.
7) Returns Clock::to_sys(t). This overload participates in overload resolution only if the expression Clock::to_sys(t) is well-formed. The program is ill-formed if Clock::to_sys(t) does not return std::chrono::sys_time<Duration> where Duration is some valid specialization of std::chrono::duration.
8) Returns Clock::from_utc(t). This overload participates in overload resolution only if the expression Clock::from_utc(t) is well-formed. The program is ill-formed if Clock::from_utc(t) does not return std::chrono::time_point<Clock, Duration> where Duration is some valid specialization of std::chrono::duration.
9) Returns Clock::to_utc(t). This overload participates in overload resolution only if the expression Clock::to_utc(t) is well-formed. The program is ill-formed if Clock::to_utc(t) does not return std::chrono::utc_time<Duration> where Duration is some valid specialization of std::chrono::duration.

Parameters

t - time point to convert

Return value

The result of the conversion as described above:

1-3) t.
6) Clock::from_sys(t).
7) Clock::to_sys(t).
8) Clock::from_utc(t).
9) Clock::to_utc(t).

See also

convert time points of one clock to another
(function template)