两个日期相差的天数计算以及关于闰年的相关计算

日期计算一直算是即简单又令人抓头的问题。

本次代码以“yyyymmdd”的两个日期,计算两个日期相差的天数。

总体的计算方式:

1、令date1存储小的日期,date2存储大的日期;

2、先忽略年份,计算出date2、date1中month+day到年头的天数,用两者天数相减即解决了除去年份部分的天数;

3、先算出date2和date1的年份差,年份差*365天 + 相间的闰年数即为年份中所差的天数。

4、结果 = 步骤2+步骤3的值

#include<iostream>
#include<algorithm>
using namespace std;
int month[13] = {0,31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};//初始化每个月份的天数 
struct {
	int year, month, day;
}d1,d2; 
int main(){
	int date1,date2; //存储输入的两个日期 
	cin >> date1 >> date2;
	if(date1 > date2) swap(date1, date2);//令date1存储小的日期、date2存储大的日期 
	d1.year = date1/10000; d1.month = date1%10000/100; d1.day = date1%100;//截取对应部分的日期 
	d2.year = date2/10000; d2.month = date2%10000/100; d2.day = date2%100;
	for(int i = 1; i < 13; ++i)
		month[i] += month[i - 1]; // 令每个month[i]表示该月份之前的所有天数,如2月及其之前的所有天数 
	int ans = month[d2.month - 1] + d2.day - month[d1.month-1] - d1.day;//先计算日期2到年头的日期,减去,日期1到年头的日期。 
	if(d1.year % 4 == 0 && d1.year%100 || d1.year % 400 == 0) //如果日期1为闰年且月份大于2了,就是减少了1天 
		if(d1.month > 2) ans--;
	if(d2.year % 4 == 0 && d2.year%100 || d2.year % 400 == 0)//如果日期2为闰年且月份大于2月了,就是加少了1天 
		if(d2.month > 2) ans++;
	//算式 = 两个日期的年份差 + 日期2的闰年数量 - 日期1的闰年数量。 
	ans += month[12] * (d2.year- d1.year) + (d2.year/4 - d2.year/100 + d2.year/400) - (d1.year/4 - d1.year/100 + d1.year/400);
	cout << ans;
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值