Namespaces
Variants

std::chrono::year_month_day:: year_month_day

From cppreference.net
year_month_day ( ) = default ;
(1) (C++20 起)
constexpr year_month_day ( const std:: chrono :: year & y,

const std:: chrono :: month & m,

const std:: chrono :: day & d ) noexcept ;
(2) (C++20 起)
constexpr year_month_day ( const std:: chrono :: year_month_day_last & ymdl ) noexcept ;
(3) (C++20 起)
constexpr year_month_day ( const std:: chrono :: sys_days & dp ) noexcept ;
(4) (C++20 起)
constexpr explicit year_month_day ( const std:: chrono :: local_days & dp ) noexcept ;
(5) (C++20 起)

构造一个 year_month_day 对象。

1) 默认构造函数使日期保持未初始化状态。
2) 构造一个 year_month_day 对象,该对象存储年份 y 、月份 m 和日期 d
3) 构造一个 year_month_day 对象,该对象存储年份 ymdl. year ( ) 、月份 ymdl. month ( ) 和日期 ymdl. day ( )
4) 构造一个 year_month_day 对象,该对象表示与 dp 所表示日期相同的日期。
5) 构造一个 year_month_day 对象,该对象表示与 dp 所表示日期相同的日期,如同通过 year_month_day ( sys_days ( dp. time_since_epoch ( ) ) ) 实现。

构造函数 (3,4) 分别定义了从 std::chrono::year_month_day_last std::chrono::sys_days 的隐式转换。

对于任何表示有效日期的 year_month_day 对象 ymd ymd. ok ( ) == true ),将 ymd 转换为 sys_days 再转换回来会得到相同的值。

注释

一个 year_month_day 也可以通过组合部分日期类型 std::chrono::year_month std::chrono::month_day 与缺失的组成部分(分别为日和年),使用 operator / 来创建。

示例

#include <chrono>
#include <iostream>
int main()
{
    using namespace std::chrono;
    constexpr auto ymd2 = std::chrono::year_month_day(
        2020y, std::chrono::January, 31d // 重载 (2)
    );
    std::cout << "ymd2: " << ymd2 << '\n';
    constexpr auto ymd3 = std::chrono::year_month_day(
        std::chrono::April / std::chrono::Monday[last] / 2023y // 重载 (3)
    );
    std::cout << "ymd3: " << ymd3 << '\n';
    const auto now = std::chrono::system_clock::now();
    const auto ymd4 = std::chrono::year_month_day(
        std::chrono::floor<std::chrono::days>(now) // 重载 (4)
    );
    std::cout << "ymd4: " << ymd4 << '\n';
}

可能的输出:

ymd2: 2020-01-31
ymd3: 2023-04-24
ymd4: 2023-08-30

参见

(C++20)
格里高利历日期创建的常规语法
(函数)