永发信息网

如何用C计算日期

答案:3  悬赏:80  手机版
解决时间 2021-01-25 08:59
今天女友突然问我我们认识了多长时间了,让我想起编一个小工具来计算时间。 比如同年7月25日---10月3日是几天,但头疼的事如果跨年怎么算,还有,我写了一部分实在没有头绪了,1,3,5,7,8,10,12 都是31天,换来换去就换晕乎了,初学C,望高手指教! 必悬高分
这是我写的一部分 怎么修改能实现上述??

#include
main()
{
int a,b,s,t,c,d,e,f,g,h,o,p;
printf("输入开始日期\n");
scanf("%d %d\n",&e,&f);
a=e;
b=f;
printf("输入目前日期\n");
scanf("%d %d",&g,&h);
s=g;
t=h;
c=0;
for(a;a<=s;a++)
{
if(a==1||a==3||a==5||a==7||a==8||a==10||a==12)
o=31;
c+=31;

if(a==2||a==4||a==6||a==9||a==11)
o=30;
c+=30;
}
if(a d=o-b;
p=d+t;
if(a=s)
d=t-b;
p=d;

printf("%d",p);

}
最佳答案
计算日期差的代码:
#include
#include
#include

int main(void)
{
time_t t1;
time_t t2;

struct tm OldTime;
struct tm NewTime;

memset(&OldTime,0x0,sizeof(tm));
OldTime.tm_year = 110;// 2010 年表示为 2010 - 1900 = 110
OldTime.tm_mon = 12;
OldTime.tm_mday = 6;

memset(&NewTime,0x0,sizeof(tm));
NewTime.tm_year = 111;// 2011 年表示为 2011 - 1900 = 111
NewTime.tm_mon = 12;
NewTime.tm_mday = 6;

t1 = mktime(&NewTime); //2011-12-6
t2 = mktime(&OldTime); //2010-12-6

printf("%d",(t1-t2)/(24*3600));

return 0;
}

C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
全部回答
给你个建议,两层循环搞定(这个用于过了一年的) 从当前日期开始 内循环:当年份不等时,加月份从大到小直到1,相等时,加到比那个月大一个月的 外循环。当年份不小于你们开始的年份时,执行内循环,小于(以保证相等的时候也计算)时再停。 就这样 如果你说不跨年,那你这个更好用,再加油,马上就能写好了 另外注意,2月只有28或29天,你写成30了
下面是我做的,你可以参照一下,year1表示开始的年份,year2表示你们现在的年份,其他的看不明白的话再留言 #include "stdio.h" void main() { int days(int,int,int); int year1,month1,day1,year2,month2,day2,a,b,c; printf("\nplease input the begin data:year,month,day\n"); scanf("%d,%d,%d",&year1,&month1,&day1); if(year1%400==0||(year1%4==0&&year1%100!=0)) a=366-days(year1,month1,day1); else a=365-days(year1,month1,day1); printf("there are %d days left on %d.\n",a,year1); printf("please input the end data:year,month,day\n"); scanf("%d,%d,%d",&year2,&month2,&day2); b=days(year2,month2,day2); c=zhong(year1,year2); if(year2-year1>1) printf("total are %d days\n",a+b+c); else printf("total are %d days\n",a+b); getch(); } int days(int x,int y,int z) { int sum,leap; switch(y) { case 1:sum=0;break; case 2:sum=31;break; case 3:sum=59;break; case 4:sum=90;break; case 5:sum=120;break; case 6:sum=151;break; case 7:sum=181;break; case 8:sum=212;break; case 9:sum=243;break; case 10:sum=273;break; case 11:sum=304;break; case 12:sum=334;break; default:printf("\ndata error");break; } sum=sum+z; if(x%400==0||(x%4==0&&x%100!=0)) leap=1; else leap=0; if(leap==1&&y>2) sum++; getch(); return sum; } int zhong(int year1,int year2) { int i,sum; sum=0; printf("please input two year data:year1,year2\n"); scanf("%d,%d",&year1,&year2); for(i=year1+1;i
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯