计算日期间隔的天数_INTEL2014笔

时间:2022-12-27 13:57:21

给定两个日期,计算日期间隔的天数。日期的数据结构定义以及相关的辅助函数如下:

Typedef struct Date{

         Intyear;

         Intmonth;

         Intday;

}Date;

Bool isLeapYear(int year);//判断闰年的函数,可以直接使用

 

 

参考资料:

http://zhidao.baidu.com/link?url=Zv-uFjAgD3Azv9NiraBL6E5rDPsM3evfvL4UbHGUJzYQBv2mQJ_LKvikHa6veM5h_Sh4euCtiCwqMGQmyIe6Ha

 

判断两个日期之间的天数
判断输入的年份是不是闰年;年份是否相同;月份是否相同;日是否相同?
同年同月最好计算,日数相减就出来了;同年不同月也好计算,计算中间相隔几个月,转换成天数,小的日期距月底有多少天,大的日期距月初多少天,三个数相加;关键是不同年的日期计算:先计算中间相隔几年,这几年的天数就出来了,再计算小的日期到年底有多少天,其次计算大的日期距年初有多少天,三个数相加就可以了。
参考资料:(也是用C++编写的,你可以把类修改为结构体,一样可以使用)
http://zhidao.baidu.com/question/55367386 

以下为计算两个日期之间天数的代码:
/* 
返回绝对值 */
int abs(int a,int b)
{
 if(a>=b)
  return (a-b);
 else
  return (b-a);
}

/* 
判断是否为闰年:,返回 1 ; 不是返回 0 . */
int IsLeap(int year)
{
 if(((year%4==0)&&(year%100!=0))||year%400==0)
  return 1;
 else
  return 0;
}

/* 
判断某个日期从年初(y11)到该天(ymd)的天数 */
int Days(int y,int m,int d)
{
 intdays[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
 int i;
 int sum = 0 ;  /* 
计算天数 */
 if(IsLeap(y)) /* 
如果为闰年,2月有 29  */
  days[2] = 29 ;
 for(i=0;i<m;i++)
  sum = sum +days[i] ;
 sum = sum + d - 1 ;
  return sum;
}

/*
 
判断两个日期之间的天数.
 
日期一: y1, m1, d1;
 
日期一: y2, m2, d2;
*/
int DiffDays(int y1,int m1,int d1,int y2,int m2,int d2)
{
 int s1,s2; /* 
计算两个日期从年初到该日期的天数 */
 int count; /* 
计算两个年份之间的差值 */
 int sum=0; /*                        */
 int t,t1,t2;
 if(y1==y2)
 {
  s1 = Days(y1,m1,d1);
  s2 = Days(y2,m2,d2);
  return abs(s1,s2);  
 }
 else if(y1>y2)
 {
  count = y1 - y2 ;
  if(count == 1)
  {
   t1 = Days(y1,m1,d1);
   t2 = Days(y2,12,31) - Days(y2,m2,d2);
   return (t1+t2+count);
  }
  else
  {  
   for(t = y2+1;t<y1;t++)
    sum = sum + Days(t,12,31);
   cout<<sum<<endl;
   t2 = Days(y2,12,31) - Days(y2,m2,d2);
   t1 = Days(y1,m1,d1);
   return (sum+t1+t2+count);
  }

 }
 else
 {
  count = y2 - y1 ;
  if(count == 1)
  {
   t2 = Days(y2,m2,d2);
   t1 = Days(y1,12,31) - Days(y1,m1,d1);
   return (t1+t2+count);
  }
  else
  {  
   for(t = y1+1;t<y2;t++)
    sum = sum + Days(t,12,31);
   t2 = Days(y2,m2,d2);
   t1 = Days(y1,12,31) - Days(y1,m1,d1);
   return (sum+t1+t2+count);
  }

 }
  


/*
以上代码在Viusal C++ 6.0 编译下通过,TC下也可以通过。
使用DiffDays(int,int,int,int,int,int)这个函数就可计算出两个日期之间的天数.
至于日期的合法性,没有进行判断;也就是说,你如果输入一个不合法的日期,计算出来的结果是不正确的;如果是合法日期,那就没问题。
*/