最終更新日時: 2024年06月11日 22時45分38秒 (JST)
Akira Takahashi が更新

履歴 編集

function
<chrono>

# std::chrono::year_month_day::operator sys_days(C++20)

    constexpr operator sys_days() const noexcept; // (1) C++20

## 概要

`year_month_day`オブジェクトをシステム時間の日付に、暗黙に型変換する。

## 戻り値

`year()`によって返される値を`y`、`month()`によって返される値を`m`、`day()`によって返される値を`d`として、

- `ok() == true`の場合、`sys_days`のエポックから`*this`までの経過日を返す
- それ以外で`y.ok() == true`かつ`m.ok() == true`である場合、`sys_days{y/m/1d} + (d - 1d)`を返す
- それ以外の場合、返される値は未規定

## 備考

- 日のみ範囲外の場合、以下のように、表そうとしている日付はそのままにしてシステム時間のエポックからの経過時間を求めて変換される
  - (うるう年以外の年)年2月29日は、(そのままの年)年3月1日に変換される
  - xxxx年1月0日は、xxxx - 1年12月31日に変換される

## 例

    #include <iostream>
    #include <chrono>

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

    int main()
    {
      // year_month_dayからsys_daysへの暗黙変換
      chrono::sys_days date = 2020y/3/1;
      std::cout << date << std::endl;

      // 日だけ範囲外に大きくなった場合でも、システム日付を求められる
      chrono::sys_days over_day = 2019y/2/29;
      std::cout << over_day << std::endl;

      chrono::sys_days over_min_day = 2020y/1/0;
      std::cout << over_min_day << std::endl;
    }

### 出力

    2020-03-01
    2019-03-01
    2019-12-31

## バージョン

### 言語

- C++20

### 処理系

- Clang: 8.0 ✅
- GCC: 9.2 ❌
- Visual C++: 2019 Update 3 ❌

## 参照

- LWG Issue 3206. `year_month_day` conversion to `sys_days` uses not-existing member function