namespace std::chrono {
template <class DestClock, class SourceClock, class Duration>
auto clock_cast(const time_point<SourceClock, Duration>& t);
}
概要
ほかの時計時間のtime_point
に変換する。
この関数は、ある時計型の時間点を、他の時計型の時間点に変換する。
例として、以下のような変換ができる:
system_clock
のtime_point
から、utc_clock
のtime_point
へ変換、およびその逆の変換tai_clock
またはgps_clock
のtime_point
から、utc_clock
のtime_point
へ変換、およびその逆の変換system_clock
のtime_point
から、tai_clock
またはgps_clock
のtime_point
への変換、およびその逆の変換- この組み合わせは
clock_time_conversion
の特殊化では定義されないが、この関数では、utc_clock
を介した、system_clock
と、tai_clock
またはgps_clock
の変換がサポートされる
- この組み合わせは
テンプレートパラメータ制約
以下の式のうち、少なくともひとつが妥当であること:
// (1)
// 任意のSourceClockから任意のDestClockへの直接の変換。
clock_time_conversion<DestClock, SourceClock>{}(t);
// (2)
// system_clockと任意のDestClockへの直接の変換、およびその逆の変換
clock_time_conversion<DestClock, system_clock>{}(
clock_time_conversion<system_clock, SourceClock>{}(t)
);
// (3)
// utc_clockと任意のDestClockへの直接の変換、およびその逆の変換
clock_time_conversion<DestClock, utc_clock>{}(
clock_time_conversion<utc_clock, SourceClock>{}(t)
);
// (4)
// utc_clockを介したsystem_clockから任意のDestClockへの変換。
// (SourceClock ->) system_clock -> utc_clock -> DestClock
clock_time_conversion<DestClock, utc_clock>{}(
clock_time_conversion<utc_clock, system_clock>{}(
clock_time_conversion<system_clock, SourceClock>{}(t)
)
)
// (5)
// utc_clockを介した任意のSourceClockからsystem_clockへの変換。
// SourceClock -> utc_clock -> system_clock (-> DestClock)
clock_time_conversion<DestClock, system_clock>{}(
clock_time_conversion<system_clock, utc_clock>{}(
clock_time_conversion<utc_clock, SourceClock>{}(t)
)
);
これらのうち、関数呼び出し演算子の呼び出し回数が少ない式が優先して選択される。選択が一意に定まらずあいまいになる場合、プログラムは不適格となる。
戻り値
上記変換式のうち、最も優先して選択された式によって時間点を変換して返す。
例
#include <iostream>
#include <chrono>
using namespace std::chrono;
int main()
{
// system_clockからutc_clockへの変換
{
utc_time ut = clock_cast<utc_clock>(system_clock::now());
std::cout << ut << std::endl;
}
// utc_clockからsystem_clockへの変換
{
sys_time st = clock_cast<system_clock>(utc_clock::now());
std::cout << st << std::endl;
}
// system_clockから (utc_clockを介して) tai_clockへ変換
{
tai_time tt = clock_cast<tai_clock>(system_clock::now());
std::cout << tt << std::endl;
}
// tai_clockから (utc_clockを介して) system_clockへ変換
{
sys_time st = clock_cast<system_clock>(tai_clock::now());
std::cout << st << std::endl;
}
}
出力例
2019-10-24 11:15:10 UTC
2019-10-24 11:15:10
2019-10-24 11:15:37 TAI
2019-10-24 11:15:10
バージョン
言語
- C++20
処理系
- Clang: 9.0 ❌
- GCC: 9.2 ❌
- Visual C++: 2019 Update 3 ❌