#include <stdio.h>
#define u8 unsigned char
#define u32 unsigned int
typedef struct
{
u8 hour;
u8 min;
u8 sec;
u32 w_year;
u8 w_month;
u8 w_date;
}_calendar_obj;
_calendar_obj c0={0,0,0,19,1,1};//定义计算的基准时间
u8 momth_day_num2019[]={31,28,31,30,31,30,31,31,30,31,30,31};
char timecount(_calendar_obj c,u32 *day_num,u32 sec_num)
{
u8 i=0;
//小于基准时间返回-1
if(c.w_year<c0.w_year||c.w_month<c0.w_month||c.w_year!=c0.w_year)
return -1;
else if(c.w_monthc0.w_month)
{
if(c.w_date<c0.w_date)//月
return -1;
else if(c.w_datec0.w_date)
{
if(c.hour<c0.hour)
return -1;
else if(c.hour==c0.hour&&c.sec<c0.sec)
return -1;
}
}
else
{
//先算差的天数
for(i=0;i<(c.w_month-1);i++)
day_num=day_num+momth_day_num2019[i];
day_num=day_num+(c.w_date-c0.w_date);
sec_num=c.hour6060+c.min60+c.sec-c0.hour6060-c0.min60-c0.sec;
printf("%d day + %d s\n",*day_num,*sec_num);
return 1;
}
}
//第二个参数时间后于第一个
char diftime(_calendar_obj c1,_calendar_obj c2)
{
u32 day_num1=0,sec_num1=0,day_num2=0,sec_num2=0;
if(timecount(c1,(&day_num1),(&sec_num1))<0)
{
printf(“ERROR”);//小于基准时间
return 0;
}
if(timecount(c2,(&day_num2),(&sec_num2))<0)
{
printf(“ERROR”);//小于基准时间
return 0;
}
day_num1=day_num2-day_num1;
if(sec_num2<sec_num1)
{
day_num1=day_num1-1;
sec_num2=sec_num2+246060;
}
sec_num1=sec_num2-sec_num1;
printf(“difference:%d day + %d s\n”,day_num1,sec_num1);
}
int main()
{
_calendar_obj calendar={21,39,20,19,4,21};
_calendar_obj cc={24,59,59,19,3,1};
_calendar_obj c5={24,59,59,19,4,1};
diftime(cc,c5);
return 0;
}