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

描述

给定两个日期,计算相差的天数。比如2010-1-1和2010-1-3相差2天。

输入

共两行: 第一行包含三个整数startYear,startMonth,startDay,分别是起始年、月、日。
第二行包含三个整数endYear,endMonth,endDay,分别是结束年、月、日。 相邻两个整数之间用单个空格隔开。

年份范围在1~3000。保证日期正确且结束日期不早于起始日期。

输出

输出一个整数,即是两个日期相差的天数。

样例输入

2008 1 1
2009 1 1

样例输出

366

提示

闰年被定义为能被4整除的年份,但是能被100整除而不能被400整除的年是例外,它们不是闰年。闰年的2月份有29天。

我的思路:
用for循环计算开始年份和结束年份之间的总天数(包括开始年份的,不包括结束年份的)判断一下 i :闰年加366天,平年加365天, 循环结束之后,把开始年份多算的 减掉,把结束年份没算上的加上。

如果年份相等,同样的思路加减两个月份之间的天数,这样就不包括月份相等的情况,再单独写个if判断月份相等的情况。

C++代码

#include<iostream>
 using namespace std;
 int main(void){
        int sy,sm,sd,ey,em,ed,C=0;
        int m[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
        cin>>sy>>sm>>sd;
        cin>>ey>>em>>ed;
        if(ey-sy==0)
        {
                if((sy%4==0&&sy%100!=0)||(sy%400==0))
                        m[2]=29;
                for(int i=sm;i<em;i++)
                {
                        if(i==sm)
                                C=m[i]-sd;
                        else
                        	C+=m[i];
                }
                C+=ed;
                if(sm==em)C=ed-sd;
                return C;

        }
        else{
                for(int i=sy;i<ey;i++)
                {
                        if(i%4==0&&i%100!=0||i%400==0)C+=366;
                        else C+=365;
                }
                if(sy%4==0&&sy%100!=0||sy%400==0) m[2]=29;
                for(int i=1;i<sm;i++) C-=m[i];
                C-=sd;
                if(ey%4==0&&ey%100!=0||ey%400==0) m[2]=29;
                else m[2]=28;
                for(int i=1;i<em;i++)C+=m[i];
                C+=ed;
                return C;
        }
        return 0;
    }


  • 13
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
可以使用以下的代码来计算两个日期之间天数(假设日期以整数形式给出,如20210727代表2021年7月27日): ```c++ #include <iostream> using namespace std; int daysBetween(int year1, int month1, int day1, int year2, int month2, int day2) { int days = 0; int monthDays[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; for (int i = year1; i < year2; i++) { if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0) { days += 366; } else { days += 365; } } if ((year2 % 4 == 0 && year2 % 100 != 0) || year2 % 400 == 0) { monthDays[2] = 29; } for (int i = 1; i < month1; i++) { days -= monthDays[i]; } days -= day1; for (int i = 1; i < month2; i++) { days += monthDays[i]; } days += day2; return days; } int main() { int year1, month1, day1; int year2, month2, day2; cin >> year1 >> month1 >> day1; cin >> year2 >> month2 >> day2; cout << daysBetween(year1, month1, day1, year2, month2, day2) << endl; return 0; } ``` 在上述代码中,我们定义了一个`daysBetween`函数,该函数接受6个参数:起始日期的年、月、日和结束日期的年、月、日。函数返回起始日期与结束日期之间天数。 函数的实现中,我们首先计算起始日期与结束日期之间的整年天数。对于每一年,我们判断其是否为闰年,并根据是否为闰年来累加该年的天数。然后,我们再计算出起始日期与年底之间天数以及结束日期与年初之间天数,并将它们相加作为结果返回。需要注意的是,我们需要先判断结束日期所在的年份是否为闰年,如果是,将2月份的天数设置为29天。 最后,在`main`函数中,我们读入起始日期和结束日期,并调用`daysBetween`函数计算它们之间天数,并将结果输出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值