Namespaces
Variants

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

From zh.cppreference.net
(1) (自 C++20 起)
(2) (自 C++20 起)
(3) (自 C++20 起)
(4) (自 C++20 起)
(5) (自 C++20 起)
(6) (自 C++20 起)
1,2) 将 dm. count ( ) 个月添加到 ymwd 所表示的日期。结果具有与 std:: chrono :: year_month ( ymwd. year ( ) , ymwd. month ( ) ) + dm 相同的 year() 和 month() ,以及与 ymwd 相同的 weekday() 和 index() 。
3,4) 将 dy. count ( ) 年数添加到 ymwd 所表示的日期。结果等效于 std:: chrono :: year_month_weekday ( ymwd. year ( ) + dy, ymwd. month ( ) , ymwd. weekday_indexed ( ) ) 。
5) 从 ymwd 表示的日期中减去 dm. count ( ) 个月。等价于 ymwd + - dm 。
6) 从 ymwd 表示的日期中减去 dy. count ( ) 年。等价于 ymwd + - dy 。

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

注释

即使 ymwd. ok ( ) 为 true ,若 ymwd. index ( ) 等于 5 ,生成的 year_month_weekday 可能仍无法表示有效日期。

示例

#include <cassert>
#include <chrono>
#include <iostream>
int main()
{
    auto ymwdi{1/std::chrono::Wednesday[1]/2021};
    std::cout << ymwdi << '\n';
    ymwdi = std::chrono::years(5) + ymwdi;
    // 2026年1月的第一个星期三
    std::cout << ymwdi << '\n';
    assert(static_cast<std::chrono::year_month_day>(ymwdi) ==
           std::chrono::January/7/2026);
    ymwdi = ymwdi - std::chrono::months(6);
    // 2025年7月的第一个星期三
    std::cout << ymwdi << '\n';
    assert(static_cast<std::chrono::year_month_day>(ymwdi) ==
           std::chrono::July/2/2025);
}

输出:

2021/Jan/Wed[1]
2026/Jan/Wed[1]
2025/Jul/Wed[1]