c语言两个时间比大小,输入两个年份,判断两个年份之间相差多少天 (c语言)

#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");

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值