Namespaces
Variants

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

From 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]