日期作差

本文介绍了一个使用C++编写的程序,该程序能够计算两个日期之间的天数差,包括处理闰年的逻辑。通过定义日期结构体并实现日期减法运算符重载,程序能够准确计算出任意两个日期之间的天数差距。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

// 1、编写一个程序,求用户输入的开始时间到终止时间之间相距的天数。(本题15分)
#include <iostream>

struct Date
{
	int year;
	int month;
	int day;
};

// 判断是否为闰年
bool is366(int year)
{
	return year % 100 == 0 && year % 400 == 0 || year % 100 != 0 && year % 4 == 0 ? true : false;
}

// 获取某年所含天数
int days_in_year(int year)
{
	return is366(year) ? 366 : 365;
}

// 获取某年某月所含天数
int days_in_month(int year, int month)
{
	int days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
	if (is366(year))
		days[1] = 29;
	return days[month - 1];
}

int operator-(const Date & date1, const Date & date2)
{
	int days_past2 = 0;
	for (int i = 1; i < date2.month; i++)
	{
		days_past2 += days_in_month(date2.year, i);
	}
	days_past2 += date2.day;

	int days_past1 = 0;
	for (int i = 1; i < date1.month; i++)
	{
		days_past1 += days_in_month(date1.year, i);
	}
	days_past1 += date1.day;

	if (date1.year * 10000 + date1.month * 100 + date1.day < date2.year * 10000 + date2.month * 100 + date2.day)
	{
		return -(date2 - date1);
	}
	else if (date1.year == date2.year)
	{
		return days_past1 - days_past2;
	}
	else if (date1.year == date2.year + 1)
	{
		int days = days_in_year(date2.year) - days_past2;
		days += days_past1;
		return days;
	}
	else// 间隔了从1.1到12.31间的整整一年及以上
	{
		int days = days_in_year(date2.year) - days_past2;
		days += days_past1;
		for (int i = date2.year + 1; i < date1.year; i++)
		{
			days += days_in_year(i);
		}
		return days;
	}
}

int main()
{
	Date date1 = {1, 1, 1};
	Date date2 = {2016, 11, 28};// 星期一
	std::cout << (date2 - date1) % 7<< std::endl;// = 0,可见公元元年元旦是星期一
	system("pause");
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值