C语言如何准确计算两个日期间的天数?

99ANYc3cd6
预计阅读时长 10 分钟
位置: 首页 C语言 正文

C语言计算两个日期之间的天数

以下是一个完整的C语言程序,用于计算两个日期之间的天数差,这个程序考虑了闰年情况,并且可以处理任意两个有效的日期。

#include <stdio.h>
#include <stdbool.h>
// 判断是否为闰年
bool isLeapYear(int year) {
    return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
// 获取某个月的天数
int daysInMonth(int month, int year) {
    static const int days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    if (month == 2 && isLeapYear(year)) {
        return 29;
    }
    return days[month - 1];
}
// 计算从公元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 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-%02d-%02d 到 %d-%02d-%02d 的天数差是: %d 天\n",
           year1, month1, day1, year2, month2, day2, days);
    return 0;
}

程序说明

  1. isLeapYear函数:判断给定年份是否为闰年
  2. daysInMonth函数:返回给定月份的天数,考虑闰年2月的情况
  3. dateToDays函数:将日期转换为从公元1年1月1日开始的天数
  4. daysBetweenDates函数:计算两个日期之间的天数差
  5. main函数:获取用户输入,验证日期有效性,并计算结果

使用示例

请输入第一个日期(日 月 年): 1 1 2025
请输入第二个日期(日 月 年): 1 1 2025
从 2025-01-01 到 2025-01-01 的天数差是: 366 天
请输入第一个日期(日 月 年): 15 6 2025
请输入第二个日期(日 月 年): 25 12 2025
从 2025-06-15 到 2025-12-25 的天数差是: 193 天

这个程序可以正确处理闰年、不同月份的天数差异,并且可以计算任意两个有效日期之间的天数差。

-- 展开阅读全文 --
头像
PHP如何织梦调用点击数?
« 上一篇 01-08
织梦管理系统微信订阅号
下一篇 » 01-08
取消
微信二维码
支付宝二维码

目录[+]