最終更新日時: 2025年10月20日 02時05分17秒 (JST)
Raclamusi が更新

履歴 編集

function
<chrono>

# std::chrono::tai_clock::to_utc(C++20)

    template <class Duration>
    static utc_time<common_type_t<Duration, seconds>>
      to_utc(const tai_time<Duration>& t) noexcept;

## 概要

TAI時間からUTC時間に変換する。

## 戻り値

    return utc_time<common_type_t<Duration, seconds>>{t.time_since_epoch()} - 378691210s;

ここで`378691210`は、システム時間のエポック1970年1月1日とTAI時間のエポック1958年1月1日との差である秒数に、TAI時間がUTC時間より10秒進んでいるという差を加算した秒数である。

    378691210s == sys_days{1970y/January/1} - sys_days{1958y/January/1} + 10s

## 例

    #include <iostream>
    #include <chrono>

    namespace chrono = std::chrono;
    using namespace std::chrono_literals;

    int main()
    {
      auto tt = chrono::clock_cast<chrono::tai_clock>(chrono::sys_days{2019y/10/24});
      auto ut = chrono::tai_clock::to_utc(tt);

      // うるう秒
      chrono::leap_second_info info = chrono::get_leap_second_info(ut);

      std::cout << tt << std::endl;
      std::cout << ut << std::endl;
      std::cout << info.elapsed.count() << std::endl;
    }

### 出力

    2019-10-24 00:00:37
    2019-10-24 00:00:00
    27

## バージョン

### 言語

- C++20

### 処理系

- Clang: 9.0 ❌
- GCC: 9.2 ❌, 15.1 ✅
- Visual C++: 2019 Update 3 ❌