计算两个日期间的天数

思路:先处理年,在处理月,再处理天。

#include<iostream>
using namespace std;

int months[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

struct date
{
	int year;
	int month;
	int day;
	date(){}
	date(int y, int m, int d)
	{
		year = y;
		month = m;
		day = d;
	}
};

bool isrun(int year)
{
	return (((year % 4 == 0)&&(year % 100 != 0)) || (year%400==0));
}

int getmonth(int year, int month)
{
	if ((year % 100 == 0) && (year % 400 != 0) && (month == 2)) return 29;
	else return months[month - 1];
}

int nextyear(date &a, date b)
{
	if ((a.year < b.year) && (a.month <= b.month) && (a.day <= b.day))
	{
		a.year++;
		if (a.month <= 2 && isrun(a.year - 1)) return 366;
		if (a.month>2 && isrun(a.year)) return 366;
		return 365;
	}
	return 0;
}
int nextmonth(date &a, date b)
{
	if (a.month < b.month && a.day <= b.day)
	{
		if (a.month == 12)
		{
			a.year++;
			a.month = 1;
			a.day = 1;
			return getmonth(a.year - 1, a.month);
		}
		a.month++;
		return getmonth(a.year, a.month-1);
	}
	return 0;
}
int nextday(date &a, date b)
{
	int m = getmonth(a.year, a.month);
	if (a.month < b.month || a.day < b.day)
	{
		if (a.day == m)
		{
			a.month++;
			a.day = 1;
		}
		else
		{
			a.day++;
		}
		return 1;
	}
	return 0;
}

int diff(date a, date b)
{
	int day = 0;
	int temp;
	while ((temp = nextyear(a, b)) != 0) day += temp;
	while ((temp = nextmonth(a, b)) != 0) day += temp;
	while ((temp = nextday(a, b)) != 0) day += temp;
	return day;
}

int main()
{
	int ayear = 1953;
	int amonth = 7;
	int aday = 1;

	int byear = 2017;
	int bmonth = 10;
	int bday = 4;

	date a(ayear, amonth, aday);
	date b(byear, bmonth, bday);
	cout << diff(a, b)<<endl;

	system("pause");
	return 0;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值