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


你可能感兴趣的:(C)