最終更新日時: 2024年10月17日 21時25分18秒 (JST)
yoh が更新

履歴 編集

function
<chrono>

# std::chrono::get_leap_second_info(C++20)

    namespace std::chrono {
      template <class Duration>
      leap_second_info get_leap_second_info(const utc_time<Duration>& ut);
    }

## 概要

指定した日時までに挿入されたうるう秒の回数を取得する。

## 戻り値

戻り値型`leap_second_info`の各メンバ変数は、以下の値が代入される：

メンバ変数 | 説明
--- | ---
`is_leap_second` | `ut`自身がうるう秒であれば`true`、そうでなければ`false`
`elapsed` | 1970年1月1日から`ut`までに正のうるう秒が挿入された合計 (秒数)。 合計には`ut`を含む

## 例

    #include <iostream>
    #include <chrono>

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

    int main()
    {
      std::cout << std::boolalpha;
      // 日本標準時(JST)2017年1月1日にうるう秒挿入が実施され
      //   2016-12-31 23:59:60 UTC
      // が存在する
      chrono::utc_time tp = chrono::clock_cast<chrono::utc_clock>(chrono::sys_days{2017y/1/1}) - 1s;
      chrono::leap_second_info info = chrono::get_leap_second_info(tp);
      std::cout << tp << std::endl;
      std::cout << info.is_leap_second << " " << info.elapsed.count() << std::endl;
    }

### 出力例

    2016-12-31 23:59:60
    true 27

### 処理系

- Clang: 9.0 ❌
- GCC: 9.2 ❌, 13.2 ⭕
- Visual C++: 2019 Update 3 ❌

## 関連項目

- `leap_second`

## 参照

- 日本標準時プロジェクト Information of Leap second
- P1466R3 Miscellaneous minor fixes for chrono
- LWG Issue 3359. `<chrono>` leap second support should allow for negative leap seconds