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

履歴 編集

function
<chrono>

# std::chrono::utc_clock::from_sys(C++20)

    template<class Duration>
    static utc_time<common_type_t<Duration, seconds>>
      from_sys(const sys_time<Duration>& t);

## 概要

システム時間からUTC時間に変換する。

## 戻り値

`u.time_since_epoch() - t.time_since_epoch()`が1970年1月1日からの挿入されたうるう秒の合計と等しくなるような`utc_time`型オブジェクト`u`を返す。`t`がうるう秒が挿入されたちょうどその日付だえる場合、この変換ではうるう秒が挿入されたものとしてカウントされる。

## 例

    #include <iostream>
    #include <chrono>

    using namespace std::chrono;

    int main()
    {
      // ここでは日付 (sys_days) から日付 (日単位のutc_time) に変換しているが、
      // 日時 (sys_seconds) を渡せば日時 (utc_seconds) が返る。
      // system_clock::time_pointを渡せば、それと同じ時間単位のutc_clockのtime_pointが返る
      auto t = sys_days{July/1/2015};
      auto u = utc_clock::from_sys(t); // 日単位のUTC時間が返る

      auto leap_seconds = duration_cast<seconds>(u.time_since_epoch() - t.time_since_epoch());

      std::cout << t << std::endl;
      std::cout << u << std::endl;
      std::cout << leap_seconds << std::endl;
    }

### 出力

    2015-07-01
    2015-07-01 00:00:00
    26s

## バージョン

### 言語

- C++20

### 処理系

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

## 参照

- LWG Issue 3359. `<chrono>` leap second support should allow for negative leap seconds