给定年月日 怎样用C语言编程计算2个日期之间的时间天数

2024-12-19 15:32:20
推荐回答(4个)
回答1:

问题不难。
思路如下:
1. 要判断时间的合法性(如果不想判断也可以)
参考资料:(使用的是C++,修改之后TC下也可运行,主要是看思路)
http://hi.baidu.com/ctralt/blog/item/ee937c167e87db4b21a4e96b.html

2. 判断两个日期之间的天数
判断输入的年份是不是闰年;年份是否相同;月份是否相同;日是否相同?
同年同月最好计算,日数相减就出来了;同年不同月也好计算,计算中间相隔几个月,转换成天数,小的日期距月底有多少天,大的日期距月初多少天,三个数相加;关键是不同年的日期计算:先计算中间相隔几年,这几年的天数就出来了,再计算小的日期到年底有多少天,其次计算大的日期距年初有多少天,三个数相加就可以了。
参考资料:(也是用C++编写的,你可以把类修改为结构体,一样可以使用)
http://zhidao.baidu.com/question/55367386

以下为计算两个日期之间天数的代码:
/* 返回绝对值 */
int abs(int a,int b)
{
if(a>=b)
return (a-b);
else
return (b-a);
}

/* 判断是否为闰年:是,返回 1 ; 不是, 返回 0 . */
int IsLeap(int year)
{
if(((year%4==0)&&(year%100!=0))||year%400==0)
return 1;
else
return 0;
}

/* 判断某个日期从年初(y年1月1日)到该天(y年m月d日)的天数 */
int Days(int y,int m,int d)
{
int days[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int i;
int sum = 0 ; /* 计算天数 */
if(IsLeap(y)) /* 如果为闰年,2月有 29 天 */
days[2] = 29 ;
for(i=0;i sum = sum +days[i] ;
sum = sum + d - 1 ;
return sum;
}

/*
判断两个日期之间的天数.
日期一:年 y1,月 m1,日 d1;
日期一:年 y2,月 m2,日 d2;
*/
int DiffDays(int y1,int m1,int d1,int y2,int m2,int d2)
{
int s1,s2; /* 计算两个日期从年初到该日期的天数 */
int count; /* 计算两个年份之间的差值 */
int sum=0; /* */
int t,t1,t2;
if(y1==y2)
{
s1 = Days(y1,m1,d1);
s2 = Days(y2,m2,d2);
return abs(s1,s2);
}
else if(y1>y2)
{
count = y1 - y2 ;
if(count == 1)
{
t1 = Days(y1,m1,d1);
t2 = Days(y2,12,31) - Days(y2,m2,d2);
return (t1+t2+count);
}
else
{
for(t = y2+1;t sum = sum + Days(t,12,31);
cout< t2 = Days(y2,12,31) - Days(y2,m2,d2);
t1 = Days(y1,m1,d1);
return (sum+t1+t2+count);
}

}
else
{
count = y2 - y1 ;
if(count == 1)
{
t2 = Days(y2,m2,d2);
t1 = Days(y1,12,31) - Days(y1,m1,d1);
return (t1+t2+count);
}
else
{
for(t = y1+1;t sum = sum + Days(t,12,31);
t2 = Days(y2,m2,d2);
t1 = Days(y1,12,31) - Days(y1,m1,d1);
return (sum+t1+t2+count);
}

}

}

/*
以上代码在Viusal C++ 6.0 编译下通过,TC下也可以通过。
使用DiffDays(int,int,int,int,int,int)这个函数就可计算出两个日期之间的天数.
至于日期的合法性,没有进行判断;也就是说,你如果输入一个不合法的日期,计算出来的结果是不正确的;如果是合法日期,那就没问题。
*/

回答2:

问题不难。
思路如下:
1.
要判断时间的合法性(如果不想判断也可以)
参考资料:(使用的是C++,修改之后TC下也可运行,主要是看思路)
http://hi.baidu.com/ctralt/blog/item/ee937c167e87db4b21a4e96b.html
2.
判断两个日期之间的天数
判断输入的年份是不是闰年;年份是否相同;月份是否相同;日是否相同?
同年同月最好计算,日数相减就出来了;同年不同月也好计算,计算中间相隔几个月,转换成天数,小的日期距月底有多少天,大的日期距月初多少天,三个数相加;关键是不同年的日期计算:先计算中间相隔几年,这几年的天数就出来了,再计算小的日期到年底有多少天,其次计算大的日期距年初有多少天,三个数相加就可以了。
参考资料:(也是用C++编写的,你可以把类修改为结构体,一样可以使用)
http://zhidao.baidu.com/question/55367386
以下为计算两个日期之间天数的代码:
/*
返回绝对值
*/
int
abs(int
a,int
b)
{
if(a>=b)
return
(a-b);
else
return
(b-a);
}
/*
判断是否为闰年:是,返回
1
;
不是,
返回
0
.
*/
int
IsLeap(int
year)
{
if(((year%4==0)&&(year%100!=0))||year%400==0)
return
1;
else
return
0;
}
/*
判断某个日期从年初(y年1月1日)到该天(y年m月d日)的天数
*/
int
Days(int
y,int
m,int
d)
{
int
days[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int
i;
int
sum
=
0
;
/*
计算天数
*/
if(IsLeap(y))
/*
如果为闰年,2月有
29

*/
days[2]
=
29
;
for(i=0;isum
=
sum
+days[i]
;
sum
=
sum
+
d
-
1
;
return
sum;
}
/*
判断两个日期之间的天数.
日期一:年
y1,月
m1,日
d1;
日期一:年
y2,月
m2,日
d2;
*/
int
DiffDays(int
y1,int
m1,int
d1,int
y2,int
m2,int
d2)
{
int
s1,s2;
/*
计算两个日期从年初到该日期的天数
*/
int
count;
/*
计算两个年份之间的差值
*/
int
sum=0;
/*
*/
int
t,t1,t2;
if(y1==y2)
{
s1
=
Days(y1,m1,d1);
s2
=
Days(y2,m2,d2);
return
abs(s1,s2);
}
else
if(y1>y2)
{
count
=
y1
-
y2
;
if(count
==
1)
{
t1
=
Days(y1,m1,d1);
t2
=
Days(y2,12,31)
-
Days(y2,m2,d2);
return
(t1+t2+count);
}
else
{
for(t
=
y2+1;tsum
=
sum
+
Days(t,12,31);
cout<t2
=
Days(y2,12,31)
-
Days(y2,m2,d2);
t1
=
Days(y1,m1,d1);
return
(sum+t1+t2+count);
}
}
else
{
count
=
y2
-
y1
;
if(count
==
1)
{
t2
=
Days(y2,m2,d2);
t1
=
Days(y1,12,31)
-
Days(y1,m1,d1);
return
(t1+t2+count);
}
else
{
for(t
=
y1+1;tsum
=
sum
+
Days(t,12,31);
t2
=
Days(y2,m2,d2);
t1
=
Days(y1,12,31)
-
Days(y1,m1,d1);
return
(sum+t1+t2+count);
}
}
}
/*
以上代码在Viusal
C++
6.0
编译下通过,TC下也可以通过。
使用DiffDays(int,int,int,int,int,int)这个函数就可计算出两个日期之间的天数.
至于日期的合法性,没有进行判断;也就是说,你如果输入一个不合法的日期,计算出来的结果是不正确的;如果是合法日期,那就没问题。
*/

回答3:

#include
main()
{
int
year,year1,month,month1,day,day1,age;
printf("请输入您的生日:");
scanf("%d
%d
%d",&year,&month,&day);
printf("请输入当前日期:");
scanf("%d
%d
%d",&year1,&month1,&day1);
if(year1==year)
age=0;
else
{age=year1-year;
if(month1age=age-1;
}
printf("您的年龄是:%d",age);
}
大概就是这个样子,我没有调试,可能有错误,但应该都是小问题,你自己调试一下,觉得哪儿不妥,可以自己改动。

回答4:

直接算两个日期距离公元元年1月1日的天数:

若干个完整的年,若干个完整的月,若干天,加起来之后两个天数相减就行了.

日期的合法性,闰年之类的就不罗嗦了.