zl程序教程

您现在的位置是:首页 >  后端

当前栏目

C语言小程序如何判断两个日期之差

C语言日期程序 如何 判断 两个 之差
2023-06-13 09:15:03 时间
1.普通的写法
复制代码代码如下:

#include<stdio.h>
intleapyear(intyear)
{
 if((year%4==0&&year%100!=0)||year%400==0)
  return1;
 else
  return0;
}
intdays(int*day1,int*day2)
{
 inti=0;
 int*tmp;
 intdiff=0;
 constintmonth[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
 if(day1[0]==day2[0])
 {
  if(day1[1]==day2[1])
  {
   diff=day1[2]-day2[2];
   diff=(diff<0)?(-diff):diff;
  }
  else
  {
   if(day1[1]<day2[1])    //day1=1991-5-8  day2=1991-6-2
   {
    tmp=day1;      //day1=1991-6-2  day2=1991-5-8
    day1=day2;
    day2=tmp;
   }
   for(i=day2[1]+1;i<day1[1];i++)
   {
    diff+= month[i];
   }
   diff+=month[day2[1]]-day2[2]+day1[2];
   if(day2[1]<=2&&day1[1]>2)
    if(leapyear(day2[0]))
     diff++;
  }
 }
 else
 {
  if(day1[0]<day2[0])
  {
   tmp=day1; 
   day1=day2;
   day2=tmp;
  }
  for(i=day2[0]+1;i<day1[0];i++)
  {
   if(leapyear(i))
    diff+=366;
   else
    diff+=365;
  }
  for(i=day2[1]+1;i<=12;i++)     //day1=1992-1-1  day2=1991-1-1
  {
   diff+=month[i];
  }
  diff+=(month[day2[1]]-day2[2]);
  if(day2[1]<=2)
   if(leapyear(day2[0]))
    diff++;
  for(i=1;i<day1[1];i++)
  {
   diff+=month[i];
  }
  diff+=day1[2];
  if(day1[1]>2)
   if(leapyear(day1[0]))
    diff++;
 }
 returndiff;
}
intmain()
{
 intday1[3],day2[3];
 intday=0;
 printf("输入日期:");
 scanf("%d-%d-%d",&day1[0],&day1[1],&day1[2]);
 printf("输入另一个日期:");
 scanf("%d-%d-%d",&day2[0],&day2[1],&day2[2]);
 day=days(day1,day2);
 printf("两个日期之间共有%d天。\n",day);
 return0;
}

2.利用结构体,代码更整洁一些
复制代码代码如下:

#include<stdio.h>
typedefstructdate
{
 intyear;
 intmonth;
 intday;
}DATE;
intleapyear(intyear)
{
 if((year%4==0&&year%100!=0)||year%400==0)
  return1;
 else
  return0;
}
intcompare(DATE*d1,DATE*d2)    //如果第一个日期比第二个日期大,交换日期
{
 DATE*tmp;
 if(d1->year==d2->year)    //年数相等
 {
  if(d1->month>d2->month)   //月数相等
  {
   tmp=d1;
   d1=d2;
   d2=d1;
  }
  elseif(d1->month==d2->month)  //日期相等
  {
   if(d1->day>d2->day)
   {
    tmp=d1;
    d1=d2;
    d2=d1;
   }
  }
 }
 elseif(d1->year>d2->year)
 {
  tmp=d1;
  d1=d2;
  d2=tmp;
 }
 return0;
}
intdiff(DATE*date1,DATE*date2)
{
 inti;
 intdiff=0;
 constintmonth[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
 if(date1->year==date2->year)
 {
  if(date1->month==date2->month)
  {
   diff=date2->day-date1->day;
  }
  else
  {
   for(i=date1->month+1;i<date2->month;i++)
   {
    diff+=month[i];
   }
   diff+=month[date1->month]-date1->day+date2->day;
   if(leapyear(date1->year))
    if(date1->month<=2&&date2->month>2)
     diff++;
  }
 }
 else
 {
  for(i=date1->year+1;i<date2->year;i++)
  {
   if(leapyear(i))
    diff+=366;
   else
    diff+=365;
  }
  for(i=date1->month+1;i<=12;i++)    //date1距离年末多少天
  {
   diff+=month[i];
  }
  diff+=month[date1->month]-date1->day;
  if(date1->month<=2)
   if(leapyear(date1->year))
    diff++;
  for(i=1;i<date2->month;i++)     //date2距离年初多少天
  {
   diff+=month[i];
  }
  diff+=date2->day;
  if(date1->month>2)
   if(leapyear(date2->year))
    diff++;
 }
 returndiff;
}
intmain()
{
 intdays=0;
 DATEday1,day2;
 DATE*date1,*date2;
 date1=&day1;
 date2=&day2;
 printf("输入日期:");
 scanf("%d-%d-%d",&(date1->year),&(date1->month),&(date1->day));
 printf("输入另一个日期:");
 scanf("%d-%d-%d",&date2->year,&date2->month,&date2->day);
 compare(date1,date2);
 days=diff(date1,date2);
 printf("两个日期之间共有%d天。\n",days);
 return0;
}