#include//定义一个结构体的日期
typedef struct
{
//年
int Year;
//月
int Month;
//日
int Day;
} DateTime;
//日期对比结果
typedef enum
{
//小于对方
Min = -1,
//等于
Equal = 0,
//大于
Max = 1
}DateTimeResult;
//判断是否是一个大的日期,返回1为大
DateTimeResult IsMaxDateTime(DateTime dt1,DateTime dt2)
{
DateTimeResult temp = IsMaxNumber(dt1.Year,dt2.Year);
if(temp != Equal)
{
return temp;
}
else
{
temp = IsMaxNumber(dt1.Month,dt2.Month);
if(temp != Equal)
{
return temp;
}
else
{
return IsMaxNumber(dt1.Day,dt2.Day);
}
}
}
//判断两个数字大小
DateTimeResult IsMaxNumber(int a,int b)
{
int temp = a - b;
if(temp != 0)
{
if(temp > 0)
{
return Max;
}
else
{
return Min;
}
}
return Equal;
}
//判断是否是瑞年,瑞年返回1
int IsRui(DateTime dt)
{
if(dt.Year % 400 == 0 || (dt.Year % 100 !=0 && dt.Year % 4 == 0))
{
return 1;
}
return 0;
}
//数据交换,大的在前,相等不管
DateTimeResult SwapDataTime(DateTime *dt1,DateTime *dt2)
{
DateTime temp;
DateTimeResult result=IsMaxDateTime(*dt1,*dt2);
if(result!=Equal)
{
if(result==Min)
{
temp=*dt1;
*dt1=*dt2;
*dt2=temp;
}
}
return result;
}
//获取当月一共有多少天
int getMonthDayCount(DateTime dt)
{
int Months[] ={31,28,31,30,31,30,31,31,30,31,30,31};
if(dt.Month == 2)
{
if(IsRui(dt))
{
return 29;
}
}
return Months[dt.Month-1];
}
//天的话,要根据月份和年份来判断上限是多少天,一次加一天
//返回值为进位
int AddDay(DateTime *dt)
{
int carry = 0;
int NowMonthDay =getMonthDayCount(*dt);
if((*dt).Day == NowMonthDay)
{
(*dt).Day = 1;
//开始加月
carry = 1;
}
else
{
(*dt).Day += 1;
}
return carry;
}
//增加月份
int AddMonth(DateTime *dt)
{
int carry = 0;
if((*dt).Month == 12)
{
(*dt).Month=1;
carry=1;
}
else
{
(*dt).Month+=1;
}
return carry;
}
//增加年
int AddYear(DateTime *dt)
{
(*dt).Year+=1;
}
//输入两个年份,判断两个年份之间相差多少天
void main(void)
{
//准备采用递增的思想实现
//肯定有一个大的时间和一个小的时间
//小的时间按照日月年,逐步往上涨,逼近指定的位置
//可能需要用到一个递归
DateTime dt1,dt2,temp;
DateTimeResult result;
int Days=0,carry=0;
dt1.Year=1991;
dt1.Month=2;
dt1.Day=15;
dt2.Year=2019;
dt2.Month=1;
dt2.Day=29;
//把dt1变成大的日期
result= SwapDataTime(&dt1,&dt2);
temp = dt2;//temp保存一下备份,里面为最小的日期
if(result!=Equal)
{
//开始进行业务处理
while ((result=SwapDataTime(&dt1,&dt2)) != Equal)
{
//下面实现了日期的递增
carry=AddDay(&dt2);
if(carry)
{
carry= AddMonth(&dt2);
if(carry)
{
AddYear(&dt2);
}
}
Days++;
}
}
printf("大的日期是:%d年%d月%d日 小的年是:%d年%d月%d日 它们相差:%d天! \r\n"
,dt1.Year,dt1.Month,dt1.Day,temp.Year,temp.Month,temp.Day,Days);
system("pause");
}