// 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;
}
日期作差
最新推荐文章于 2024-04-09 11:03:27 发布