您的位置:首页 > 编程语言 > C语言/C++

C语言计算两个日期之间的天数

2015-05-22 11:09 441 查看
计算两个年月日之间的天数,思路是分别算出日期的总天数然后相减。

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 天数 计算