计算日期差值 C实现

#include "stdafx.h"
#include
"math.h"
#include
<cstdio>
using namespace std;
bool IsRunYear(int y)
{
bool result=false;
if(y%4==0&&y%100!=0||y%400==0)
result
=true;
return result;
}
int MaxDay(int m,int y)
{
int result;
if(m==1||m==3||m==5||m==7||m==8||m==10||m==12)
result
=31;
else if(m==2&&IsRunYear(y))
result
=29;
else if(m==2&&!IsRunYear(y))
result
=28;
else
result
=30;
return result;
}
long DiffDay(int m,int y)
{
long val=0;
while(--m)
{
val
+=MaxDay(m,y);
}
return val;
}
long DiffYear(int minY,int maxY)
{
long diff=0;
do
{
if(IsRunYear(minY))
diff
+=366;
else
diff
+=365;
}
while(++minY!=maxY);
return diff;
}

int main()
{
int y0,y1,m0,m1,d0,d1;
long diffDay;
do
{
printf(
"Please input the first year,month,day between 0000-1-1 and 9999-12-31\n");
scanf(
"%d,%d,%d",&y0,&m0,&d0);
}
while(!(y0>=0&&y0<=9999&m0>=1&&m0<=12&d0>=1&&d0<=MaxDay(m0,y0)));
do
{
printf(
"Please input the second year,month,day between 0000-1-1 and 9999-12-31\n");
scanf(
"%d,%d,%d",&y1,&m1,&d1);
}
while(!(y1>=0&&y1<=9999&m1>=1&&m1<=12&&d1>=1&&d1<=MaxDay(m1,y1)));
if(y0==y1&&m0==m1)
diffDay
=abs(d0-d1);
else if (y0==y1)
{
long day1=DiffDay(m0,y0)+d0;
long day2=DiffDay(m1,y1)+d1;
diffDay
=abs(day1-day2);
}
else
{
int minY,maxY;
long day1,day2;
if(y0>y1)
{
minY
=y1;
maxY
=y0;
day1
=DiffDay(m1,y1)+d1;
day2
=DiffDay(m0,y0)+d0;
}
else
{
minY
=y0;
maxY
=y1;
day1
=DiffDay(m0,y0)+d0;
day2
=DiffDay(m1,y1)+d1;
}
long day3=DiffYear(minY,maxY);
diffDay
=day3+day2-day1;
}
printf(
"The diff day=%ld",diffDay);
return 0;
}

posted on 2011-09-11 20:43  rita zhao  阅读(311)  评论(0)    收藏  举报

导航