C语言,跨年怎么算天数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言,跨年怎么算天数相关的知识,希望对你有一定的参考价值。

用c编写函数能够跨年,算出天数,给一个思路吧。

这个问题主要是2月比较麻烦,要计算是否闰年,即年%4是否为0,

还要判断是几月,1月31天,2月28或29天,3月31天。。。。。。以此类推

先计算上一年到年底多少天,再计算当年初到现在多少天,

跨越多年时,中间年加365.
参考技术A 日期换算成秒,然后相减,最后根据差值算天数
time.h里面有double difftime(time_t, time_t);这个方法,实现的思路就是这样子的。

c语言两日期相差天数

#include <stdio.h>
#include<math.h>
void main()

int s=0,m1,d1,y1,y2,m2,d2,i,a[12]=31,28,31,30,31,30,31,31,30,31,30,31,b[12]=31,29,31,30,31,30,31,31,30,31,30,31;
scanf("%d %d %d",&y1,&m1,&d1);
scanf("%d %d %d",&y2,&m2,&d2);
if(y1==y2)

if(y1%100!=0&&y1%4==0||y1%400==0)

while(m1<m2)
s=b[m1-1]+s;
m1=m1+1;


else

while(m1<m2)
s=a[m1-1]+s;
m1=m1+1;


printf("%d days\n",s+d2-d1);

else

while(y1<y2)

if(m1<=2)

if(y1%100!=0&&y1%4==0||y1%400==0)
s=366+s;
else
s=365+s;
y1=y1+1;

else

y1=y1+1;
if(y1%100!=0&&y1%4==0||y1%400==0)
s=366+s;
else
s=365+s;


if(m1<=m2)

if(y2%100!=0&&y2%4==0||y2%400==0)
for(i=0;m1<m2;i++)
s=b[m1-1]+s;
m1=m1+1;


else
for(i=0;m1<m2;i++)
s=a[m1-1]+s;
m1=m1+1;


printf("%d days\n",s+d2-d1);

else

if(y2%100!=0&&y2%4==0||y2%400==0)

while(m1>m2)
s=b[m1-1]+s;
m1=m1-1;


else

while(m1>m2)
s=a[m1-1]+s;
m1=m1-1;


printf("%d days\n",s+d2-d1);




求高手指点错误所在
大体说下我的思路:
1.判断是否是同一年。
2.不同年,先计算相差的年数,再计算月份,最后计算天数

#include <stdio.h>
#include<math.h>
int main()

int s=0,m1,d1,y1,y2,m2,d2,i,a[12]=31,28,31,30,31,30,31,31,30,31,30,31,b[12]=31,29,31,30,31,30,31,31,30,31,30,31;
scanf("%d %d %d",&y1,&m1,&d1);
scanf("%d %d %d",&y2,&m2,&d2);
if(y1==y2)

if((y1%100!=0&&y1%4==0)||y1%400==0)

while(m1<m2)
s=b[m1-1]+s;
m1=m1+1;


else

while(m1<m2)
s=a[m1-1]+s;
m1=m1+1;


printf("%d days\n",s+d2-d1);

else

while(y1<y2)

if(m1<=2)

if((y1%100!=0&&y1%4==0)||y1%400==0)
s=366+s;
else
s=365+s;
y1=y1+1;

else

y1=y1+1;
if((y1%100!=0&&y1%4==0)||y1%400==0)
s=366+s;
else
s=365+s;


if(m1<=m2)

if((y2%100!=0&&y2%4==0)||y2%400==0)
for(i=0;m1<m2;i++)
s=b[m1-1]+s;
m1=m1+1;


else
for(i=0;m1<m2;i++)
s=a[m1-1]+s;
m1=m1+1;


printf("%d days\n",s+d2-d1);

else

if((y2%100!=0&&y2%4==0)||y2%400==0)

while(m1>m2)
s=b[m1-1]+s;
m1=m1-1;


else

while(m1>m2)
s=a[m1-1]+s;
m1=m1-1;


printf("%d days\n",s+d2-d1);


return 0;

你试试看!追问

还是吧对。。你改哪了?

追答

if后面多加了一个括号!

参考技术A 说实话最好的方式是用时间戳的方式。在类unix系统中时间戳是从1970年1月1日00:00到某时间所经历的毫秒数,转化后两者相减再转化为天数就得出结果了。
"2014-04-09 22:00:02" => 2312312312321(到现在为止的时间长度)
"2013-12-11 12:33:12" => 231212311111
两者相差的毫秒数 => 转为天数

以上是关于C语言,跨年怎么算天数的主要内容,如果未能解决你的问题,请参考以下文章

如何用c语言来计算日期间隔天数?

c语言两日期相差天数

C语言求两个日期相差的天数

c语言graphics用啥替代

C语言中 求两个日期间的天数

C语言跨年烟花代码,C语言实现烟花表白代码