C語言計算兩個日期之間的天數

計算兩個年月日之間的天數,思路是分別算出日期的總天數然後相減。

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;
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章