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;
}
}
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语言编写的计算两个日期之间天数的程序
- 计算两个日期之间的天数
- Java 计算两个日期之间相差的天数
- 计算两个日期的时间差,输出它们之间的天数
- java计算两个日期之间相差的天数
- java计算两个日期之间相差的天数
- JS计算两个日期之间的天数
- 根据两个日期计算此两日期之间的总天数
- JS计算两个日期之间的天数
- JAVA计算两个日期之间相差的天数
- 怎样计算两个日期之间相隔的天数,如2005-5-6和2004-6-9
- excel表格中如何计算两个日期之间的天数?
- Java中计算任意两个日期之间的工作天数
- Android-计算两个日期之间间隔的天数
- java计算两个日期之间相差的天数
- java计算两个日期之间相差的天数
- JAVA给定日期,计算前几天后几天的日期,计算两个日期之间的天数
- shell 计算两个日期之间的天数
- java计算两个日期之间相差的天数
- java计算两个日期之间相差的天数