year_month_day
类
表示月份、年份和日期。
语法
class year_month_day; // C++20
成员
名称 | 说明 |
---|---|
构造函数 | 构造 year_month_day |
day |
返回日期。 |
month |
返回月份。 |
ok |
验证 year 和 month 值是否在有效范围内。 |
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_days
或 local_days
值。
m
一个 month
值。
y
一个 year
值。
ymdl
一个 year_month_day_last
值。
注解
1) 默认构造函数不初始化月份或日期。
2) 构造具有指定年份、月和日的 A year_month_day
。
3) 使用指定的年份、月和日构造一个year_month_day
ymdl
4) 构造 year_month_day
日期与 dp
.
5) 构造一个日期与 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/
头文件引用