year_month_day

表示月份、年份和日期。

语法

class year_month_day; // C++20

成员

名称 说明
构造函数 构造 year_month_day
day 返回日期。
month 返回月份。
ok 验证 yearmonth 值是否在有效范围内。
operator+= 添加指定的月份数或年份数。
operator-= 减去指定的月份数或年份数。
operator local_days 获取从 system_clock 纪元到此 year_month_day 的天数作为 local_days
operator sys_days 获取从 system_clock 纪元到此 year_month_day 的天数作为 sys_days
year 返回年份。

非成员

“属性” 描述
from_stream 使用指定格式从流分析 year_month_day
operator+ 添加月份或年份。
operator- 减去月份或年份。
operator== 确定两个 year_month_day 值是否相等。
operator<=> 比较两个 year_month_day 值。 >, >=, <=, <, != 运算符由编译器合成。
operator<< year_month_day 输出到流。

要求

标头: <chrono> (自C++20以来)

命名空间std::chrono

编译器选项: /std:c++latest

构造函数

构造 year_month_day

1) year_month_day() = default;
2) constexpr year_month_day(const year& y, const month& m, day& d) noexcept;
3) constexpr year_month_day(const year_month_day_last& ymdl) noexcept;
4) constexpr year_month_day(const sys_days& dp) noexcept;
5) constexpr explicit year_month_day(const local_days& dp) noexcept;

参数

d 一个 day 值。

dp 一个 sys_dayslocal_days 值。

m 一个 month 值。

y
一个 year 值。

ymdl 一个 year_month_day_last 值。

注解

1) 默认构造函数不初始化月份或日期。
2) 构造具有指定年份、月和日的 A year_month_day
3) 使用指定的年份、月和日构造一个year_month_dayymdl
4) 构造 year_month_day 日期与 dp.
5) 构造一个日期与 year_month_day /a0> 相同的日期 dp ,但与构造方式 year_month_day(sys_days(dp.time_since_epoch()))相同。

有关用于指定日期的 C++ 20 语法的信息,请参阅 operator/

示例:创建 year_month_day

// compile using: /std:c++latest
#include <iostream>
#include <chrono>

using namespace std::chrono;

int main()
{
    year_month_day ymd{ April / 4 / 1975 };
    std::cout << ymd;
    return 0;
}
1975-04-04

day

获取日期。

constexpr day day() const noexcept;

返回值

day 值。

month

获取月份。

constexpr month month() const noexcept;

返回值

month 值。

operator local_days

获取从 system_clock 纪元(1970 年 1 月 1 日)到此 year_month_day 的天数作为 local_days

constexpr explicit operator local_days() const noexcept;

返回值

如果为 ok(),则返回天数作为 local_days{sys_days{*this}.time_since_epoch()}

operator sys_days

获取从 system_clock 纪元(1970 年 1 月 1 日)到此 year_month_day 的天数作为 sys_days

constexpr operator sys_days() const noexcept;

返回值

如果为 ok(),则返回 sys_days,其中包含从 sys_days 纪元(1970 年 1 月 1 日)到此 year_month_day 中保留的日期的天数。 如果此 year_month_day 中的日期在 sys_days 纪元之前,那么值为负数。

如果此 year_month_day 中的年份和月份为 ok(),则返回 sys_days{year/month/1d} + (day-1d)。 否则,未指定返回值。

范围 [days{-12687428}, days{11248737}] 中的 sys_days 可以转换为 year_month_day 并返回,并且具有相同的值。

year

获取年份。

constexpr year year() const noexcept;

返回值

year

ok

检查存储在此 year_month_day 中的年份和月份值是否都在有效范围内。 确保日期在范围 [1d, (y/m/last).day()] 内,考虑闰年和每个月的不同天数。

constexpr bool ok() const noexcept;

返回值

如果 year_month_day 年份、月份和日期值都在有效范围内,则返回 true。 否则为 false

operator+=

向此 year_month_day 添加月份或年份。

1) constexpr year_month_day& operator+=(const months& dm) noexcept;
2) constexpr year_month_day& operator+=(const years& dy) noexcept;

参数

dm
要添加的月数。

dy
要添加的年数。

返回值

*this,反映加法的结果。

示例: operator+=

// compile using: /std:c++latest
#include <iostream>
#include <chrono>

using namespace std::chrono;

int main()
{
    year_month_day ymd{June / 1d / 2021y};

    std::cout << ymd << '\n';

    ymd += months{2};
    ymd += years{1};

    std::cout << ymd;
    
    return 0;
}
2021-06-01
2022-08-01

operator-=

从此 year_month_day 减去月份或年份。

1) constexpr year_month_day& operator-=(const months& dm) noexcept;
2) constexpr year_month_day& operator-=(const years& dy) noexcept;

参数

dm
要减去的月数。

dy
要减去的年数。

返回值

*this,反映减法的结果。

示例: operator-=

// compile using: /std:c++latest
#include <iostream>
#include <chrono>

using namespace std::chrono;

int main()
{
    year_month_day ymd{June / 1d / 2021y};

    std::cout << ymd << '\n';

    ymd -= months{2};
    ymd -= years{1};

    std::cout << ymd;
    
    return 0;
}
2021-06-01
2020-04-01

另请参阅

<chrono>
year
year_month
year_month_day_last
year_month_weekday
year_month_weekday_last
operator/
头文件引用