如何用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
相关产品推荐
相关产品推荐

