C语言计算两个日期之间的天数
以下是一个完整的C语言程序,用于计算两个日期之间的天数差,这个程序考虑了闰年,并使用了Zeller公式来计算任意两个日期之间的天数差。

(图片来源网络,侵删)
#include <stdio.h>
#include <stdbool.h>
// 判断是否为闰年
bool isLeapYear(int year) {
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
return true;
}
return false;
}
// 获取某个月的天数
int daysInMonth(int month, int year) {
if (month == 2) {
return isLeapYear(year) ? 29 : 28;
} else if (month == 4 || month == 6 || month == 9 || month == 11) {
return 30;
} else {
return 31;
}
}
// 计算从公元1年1月1日到给定日期的总天数
int dateToDays(int day, int month, int year) {
int totalDays = 0;
// 计算年份贡献的天数
for (int y = 1; y < year; y++) {
totalDays += isLeapYear(y) ? 366 : 365;
}
// 计算月份贡献的天数
for (int m = 1; m < month; m++) {
totalDays += daysInMonth(m, year);
}
// 加上当前月份的天数
totalDays += day;
return totalDays;
}
// 计算两个日期之间的天数差
int daysBetweenDates(int day1, int month1, int year1,
int day2, int month2, int year2) {
int days1 = dateToDays(day1, month1, year1);
int days2 = dateToDays(day2, month2, year2);
return (days1 > days2) ? (days1 - days2) : (days2 - days1);
}
int main() {
int day1, month1, year1;
int day2, month2, year2;
printf("请输入第一个日期(日 月 年): ");
scanf("%d %d %d", &day1, &month1, &year1);
printf("请输入第二个日期(日 月 年): ");
scanf("%d %d %d", &day2, &month2, &year2);
// 验证日期的有效性
if (day1 < 1 || day1 > daysInMonth(month1, year1) ||
month1 < 1 || month1 > 12 ||
year1 < 1) {
printf("第一个日期无效!\n");
return 1;
}
if (day2 < 1 || day2 > daysInMonth(month2, year2) ||
month2 < 1 || month2 > 12 ||
year2 < 1) {
printf("第二个日期无效!\n");
return 1;
}
int days = daysBetweenDates(day1, month1, year1, day2, month2, year2);
printf("两个日期之间的天数差为: %d 天\n", days);
return 0;
}
程序说明
-
isLeapYear函数:判断给定年份是否为闰年
闰年规则:能被4整除但不能被100整除,或者能被400整除
-
daysInMonth函数:返回给定年份和月份的天数
- 2月根据闰年返回28或29天
- 4、6、9、11月返回30天
- 其他月份返回31天
-
dateToDays函数:计算从公元1年1月1日到给定日期的总天数
(图片来源网络,侵删)- 先累加年份的天数(考虑闰年)
- 再累加月份的天数
- 最后加上当前月份的天数
-
daysBetweenDates函数:计算两个日期之间的天数差
- 分别计算两个日期的总天数
- 返回绝对差值
-
主函数:
- 获取用户输入的两个日期
- 验证日期的有效性
- 调用计算函数并输出结果
使用示例
请输入第一个日期(日 月 年): 1 1 2025
请输入第二个日期(日 月 年): 1 1 2025
两个日期之间的天数差为: 366 天
这个程序可以正确处理闰年,并计算任意两个有效日期之间的天数差。
