You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用C++20 <chrono>计算两个year_month_day对象的天数差?

在C++20 中计算两个year_month_day的天数差值

year_month_day属于日历日期类型,无法直接相减得到天数差,必须先将其转换为代表系统时间天数的sys_days类型,再进行减法运算。另外还要考虑当前日期已过当年圣诞节的情况,避免得到负数差值。

修正后的完整代码如下:

#include <chrono>
#include <iostream>

int main()
{
    using namespace std::chrono;
    const auto now = system_clock::now();
    const year_month_day today = floor<days>(now);
    
    // 先构造当年的圣诞节日期
    year_month_day xmas = today.year() / December / 25;
    // 如果今天已经过了圣诞节,就取明年的圣诞节
    if (xmas < today)
    {
        xmas = (today.year() + years{1}) / December / 25;
    }

    // 转换为sys_days后再计算差值
    const days days_till_xmas = sys_days{xmas} - sys_days{today};
    
    // 输出结果,count()获取天数数值
    std::cout << "距离圣诞节还有 " << days_till_xmas.count() << " 天\n";
}

关键说明:

  • sys_days是C++20 中表示从系统纪元(通常是1970-01-01)开始的天数计数类型,它支持减法运算,结果为days类型。
  • 直接对year_month_day做减法会编译报错,因为该类型没有定义减法运算符来返回days。
  • 判断xmas < today可以处理跨年情况,确保计算的是下一个圣诞节的剩余天数。

内容的提问来源于stack exchange,提问作者user13692250

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 11:25:19