Namespaces
Variants

std::chrono:: operator+, std::chrono:: operator- (std::chrono::year_month_day)

From cppreference.net
定义于头文件 <chrono>
(C++20 起)
(C++20 起)
constexpr std:: chrono :: year_month_day operator + ( const std:: chrono :: year_month_day & ymd,

const std:: chrono :: years & dy

) noexcept ;
(C++20 起)
constexpr std:: chrono :: year_month_day operator + ( const std:: chrono :: years & dy,

const std:: chrono :: year_month_day & ymd

) noexcept ;
(C++20 起)
(C++20 起)
constexpr std:: chrono :: year_month_day operator - ( const std:: chrono :: year_month_day & ymd,

const std:: chrono :: years & dy

) noexcept ;
(C++20 起)
1,2) dm. count ( ) 个月添加到 ymd 所表示的日期。结果具有与 ymd 相同的 day ( ) ,并且具有与 std:: chrono :: year_month ( ymd. year ( ) , ymd. month ( ) ) + dm 相同的 year ( ) month ( )
3,4) dy. count ( ) 年添加到 ymd 所表示的日期。结果等同于 std:: chrono :: year_month_day ( ymd. year ( ) + dy, ymd. month ( ) , ymd. day ( )
5) ymd 表示的日期中减去 dm. count ( ) 个月。等价于 ymd + - dm
6) ymd 表示的日期中减去 dy. count ( ) 年。等价于 ymd + - dy

对于可同时转换为 std::chrono::years std::chrono::months 的时间段,若调用存在歧义,则优先选择 years 重载 (3,4,6)

注释

即使 ymd. ok ( ) true ,若 ymd. day ( ) 的值为 29、30 或 31,生成的 year_month_day 可能仍不代表有效日期。

示例

#include <chrono>
#include <iostream>
int main()
{
    std::cout << std::boolalpha;
    auto ymd{std::chrono::day(1)/std::chrono::July/2021};
    ymd = ymd + std::chrono::months(4);
    std::cout << (ymd.month() == std::chrono::November) << ' '
              << (ymd.year() == std::chrono::year(2021)) << ' ';
    ymd = ymd - std::chrono::years(10);
    std::cout << (ymd.month() == std::chrono::month(11)) << ' '
              << (ymd.year() == std::chrono::year(2011)) << '\n';
}

输出:

true true true true