計算兩個年月日之間的天數,思路是分別算出日期的總天數然後相減。
typedef struct
{
int iYear;
int iMonth;
int iDay;
}Date;
//IsLeap函數判斷一個年份是否爲閏年,方法如下:
bool IsLeap(int year)
{
return (year % 4 ==0 || year % 400 ==0) && (year % 100 !=0);
}
//DayInYear能根據給定的日期,求出它在該年的第幾天,代碼如下
int DayInYear(Date* pDate)
{
int iRet = 0;
int DAY[12]={31,28,31,30,31,30,31,31,30,31,30,31};
if(IsLeap(pDate->iYear))
DAY[1] = 29;
for(int i=0; i < pDate->iMonth - 1; ++i)
{
iRet += DAY[i];
}
return iRet;
}
int DaysBetween2Date(Date* pDate1, Date* pDate2)
{
//取出日期中的年月日
Date *pTmp;
if(pDate1->iYear == pDate2->iYear && pDate1->iMonth == pDate2->iMonth)
{
return abs(pDate1->iDay - pDate2->iDay);
}
else if(pDate1->iYear == pDate2->iYear) //如果年相同
{
return abs(DayInYear(pDate1) - DayInYear(pDate2));
}
else //年月都不相同
{
int d1,d2,d3;
//確保pDate1->year1年份比pDate2->year2早
if(pDate1->iYear > pDate2->iYear)
{
pTmp = pDate1;
pDate1 = pDate2;
pDate1 = pTmp;
}
if(IsLeap(pDate1->iYear))
d1 = 366 - DayInYear(pDate1); //取得這個日期在該年還於下多少天
else
d1 = 365 - DayInYear(pDate1);
d2 = DayInYear(pDate2); //取得在當年中的第幾天
d3 = 0;
for(int year = pDate1->iYear + 1; year < pDate2->iYear; year++)
{
if(IsLeap(year))
d3 += 366;
else
d3 += 365;
}
return d1 + d2 + d3;
}
}