# std::chrono::year_month_day::operator sys_days, std::chrono::year_month_day::operator local_days

< cpp‎ | chrono‎ | year month day

constexpr operator std::chrono::sys_days() const noexcept; | (1) | (C++20 起)
explicit constexpr operator std::chrono::local_days() const noexcept; | (2) | (C++20 起)

将 `*this` 转换成与此 `year_month_day` 表示同一日期的 std::chrono::time_point 。

1) 若 ok() 为 true ，则返回值保有从 std::chrono::system_clock 纪元 (1970-01-01) 到 `*this` 的日数总计。若 `*this` 表示的日期先于纪元，则结果为负。
否则，若存储的 `year` 和 `month` 合法（ year().ok() && month().ok() 为 true ），则返回值为 sys_days(year()/month()/1d) + (day() - 1d) 。
否则（若 year().ok() && month().ok() 为 false ），返回值未指定。
范围 [std::chrono::days{-12687428}, std::chrono::days{11248737}] 中的 `sys_days` ，转换到 `year_month_day` 再转换回来后，生成相同值。
2) 同 (1) ，但替而返回 `local_days` 。等价于 return local_days(sys_days(*this).time_since_epoch()); 。

### 注意

转换到 `sys_days` 再转换回来，能用于正规化含有非法 `day` 但有合法 `year` 和 `month` 的 `year_month_day` ：

    using namespace std::chrono;
    auto ymd = 2017y/January/0;
    ymd = sys_days{ymd};
    // ymd 现在是 2016y/December/31

能通过加（或减）零个 std::chrono::months 正规化年和月：

    using namespace std::chrono;
    constexpr year_month_day normalize(year_month_day ymd){
        ymd += months{0}; // 正规化年和月
        return sys_days{ymd}; // 正规化日
    }
    static_assert(normalize(2017y/33/59) == 2019y/10/29);

### 示例

| 本节未完成 原因：暂无示例