最終更新日時(UTC):
が更新

履歴 編集

function
<chrono>

std::chrono::clock_cast(C++20)

namespace std::chrono {
  template <class DestClock, class SourceClock, class Duration>
  auto clock_cast(const time_point<SourceClock, Duration>& t);
}

概要

ほかの時計時間のtime_pointに変換する。

この関数は、ある時計型の時間点を、他の時計型の時間点に変換する。

例として、以下のような変換ができる:

テンプレートパラメータ制約

以下の式のうち、少なくともひとつが妥当であること:

// (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時点で実装なし)