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

如何实现计算两个日期字符串之间天数差的C++函数?

C++实现日期天数差计算

核心思路

  • 将两个日期分别转换为从公元元年到该日期的总天数,两个总天数的绝对值差就是所求的天数间隔。
  • 关键是实现一个日期转总天数的辅助函数,处理闰年、各月天数等细节。

辅助函数实现细节

  1. 日期解析:从输入的YYYY-MM-DD格式字符串中提取年、月、日三个整数。
  2. 闰年判断:满足以下任一条件即为闰年:
    • 能被4整除但不能被100整除
    • 能被400整除
  3. 月份天数数组:平年各月天数为{31,28,31,30,31,30,31,31,30,31,30,31},闰年二月加1天。
  4. 总天数计算:
    • 累加从公元元年到目标年份前一年的所有天数(每闰年加366,平年加365)
    • 累加目标年份中当前月份前所有月份的天数
    • 加上当月的日期数

完整代码实现

#include <string>
#include <cmath>
#include <sstream>
#include <vector>

using namespace std;

class Solution {
public:
    int daysBetweenDates(string date1, string date2) {
        return abs(dateToDays(date1) - dateToDays(date2));
    }

private:
    bool isLeapYear(int year) {
        if (year % 400 == 0) return true;
        if (year % 100 == 0) return false;
        return year % 4 == 0;
    }

    int dateToDays(string date) {
        // 解析日期字符串
        vector<int> parts;
        stringstream ss(date);
        string part;
        while (getline(ss, part, '-')) {
            parts.push_back(stoi(part));
        }
        int year = parts[0], month = parts[1], day = parts[2];

        // 各月天数(平年)
        int monthDays[] = {31,28,31,30,31,30,31,31,30,31,30,31};
        int totalDays = 0;

        // 累加年份天数
        for (int y = 1; y < year; ++y) {
            totalDays += isLeapYear(y) ? 366 : 365;
        }

        // 累加月份天数
        for (int m = 1; m < month; ++m) {
            totalDays += monthDays[m-1];
            if (m == 2 && isLeapYear(year)) {
                totalDays += 1;
            }
        }

        // 加上当月天数
        totalDays += day;

        return totalDays;
    }
};

示例验证

对于输入date1 = "2020-01-15"和date2 = "2019-12-31":

  • 两个日期的总天数差为15,与预期结果一致。

内容的提问来源于stack exchange,提问作者Hoàng

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 18:01:14