std::chrono::year_month_day::operator sys_days, std::chrono::year_month_day::operator local_days
来自cppreference.com
< 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);
示例
本节未完成 原因:暂无示例 |