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

如何用C语言计算两个日期的天数差——日期转天数实现

计算两个日期相隔天数的C语言实现

核心思路是把两个日期分别转换成从某个固定基准日(比如公元1年1月1日)开始的总天数,然后将两个总天数相减取绝对值,得到的结果就是相隔的天数。

步骤1:实现日期转总天数的函数

首先需要一个函数来计算某个日期到基准日的总天数,这里要处理闰年对2月天数的影响:

#include <stdio.h>
#include <stdlib.h> // 用于abs()函数

// 判断是否为闰年
int is_leap(int year) {
    if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
        return 1;
    }
    return 0;
}

// 计算日期对应的总天数
int date_to_days(int year, int month, int day) {
    int total_days = 0;
    // 累加之前所有年份的天数
    for (int i = 1; i < year; i++) {
        total_days += is_leap(i) ? 366 : 365;
    }
    // 累加当前年份中之前月份的天数
    int month_days[] = {31,28,31,30,31,30,31,31,30,31,30,31};
    if (is_leap(year)) {
        month_days[1] = 29;
    }
    for (int i = 0; i < month - 1; i++) {
        total_days += month_days[i];
    }
    // 加上当月的天数
    total_days += day;
    return total_days;
}

步骤2:计算两个日期的天数差

有了上面的函数,只需要把两个日期都转成总天数,然后相减取绝对值即可:

int days_between(int y1, int m1, int d1, int y2, int m2, int d2) {
    int days1 = date_to_days(y1, m1, d1);
    int days2 = date_to_days(y2, m2, d2);
    return abs(days1 - days2);
}

测试示例

在主函数里可以这样测试:

int main() {
    int y1 = 2020, m1 = 1, d1 = 1;
    int y2 = 2024, m2 = 10, d2 = 1;
    int diff = days_between(y1, m1, d1, y2, m2, d2);
    printf("相隔天数:%d\n", diff);
    return 0;
}

注意事项

  • 这个实现支持公元1年及以后的日期,如果需要处理更早的日期(比如公元前),需要额外调整闰年规则和年份计算逻辑。
  • 输入的日期必须是合法的(比如13月、32日这种非法日期需要提前校验,代码里没有包含这部分,你可以根据需求添加输入验证)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 19:45:35