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

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

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

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

c语言 计算两个日期之间的天数
(图片来源网络,侵删)
#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;
}

程序说明

  1. isLeapYear函数:判断给定年份是否为闰年

    闰年规则:能被4整除但不能被100整除,或者能被400整除

  2. daysInMonth函数:返回给定年份和月份的天数

    • 2月根据闰年返回28或29天
    • 4、6、9、11月返回30天
    • 其他月份返回31天
  3. dateToDays函数:计算从公元1年1月1日到给定日期的总天数

    c语言 计算两个日期之间的天数
    (图片来源网络,侵删)
    • 先累加年份的天数(考虑闰年)
    • 再累加月份的天数
    • 最后加上当前月份的天数
  4. daysBetweenDates函数:计算两个日期之间的天数差

    • 分别计算两个日期的总天数
    • 返回绝对差值
  5. 主函数

    • 获取用户输入的两个日期
    • 验证日期的有效性
    • 调用计算函数并输出结果

使用示例

请输入第一个日期(日 月 年): 1 1 2025
请输入第二个日期(日 月 年): 1 1 2025
两个日期之间的天数差为: 366 天

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

-- 展开阅读全文 --
头像
织梦管理系统微信订阅号
« 上一篇 01-08
织梦网站被挂马后如何紧急处理?
下一篇 » 01-08

相关文章

取消
微信二维码
支付宝二维码

目录[+]