注册 登录
编程论坛 新人交流区

c++如何编写一个求任意2个日期的天数差?请大家指点~~

weiweizkk 发布于 2007-10-09 20:17, 1060 次点击
谢谢~~~
9 回复
#2
放纵思想2007-10-09 21:39
Debug.Print CDate("2005-11-9") - CDate("2005-9-8")
#3
qq34121552007-10-09 22:34

#include<stdio.h>
#include<math.h>
int leafyear(int year);
int passday(struct date date);

struct date
{
int year;
int mouth;
int day;
};

void main()
{
struct date a,b;
int day=0; //最后的结果
printf("请输入第一个日期<年 月 日>: ");
scanf("%d%d%d",&a.year,&a.mouth,&a.day);
printf("请输入第二个日期<年 月 日>: ");
scanf("%d%d%d",&b.year,&b.mouth,&b.day);

if(a.year==b.year)
{
day=abs(passday(a)-passday(b)); //abs()求绝对值
}

if(a.year!=b.year)
{
day=abs(a.year-b.year)+abs(passday(a)-passday(b));
}

printf("相差 %d 天!",day);
}

int leafyear(int year)
{
if((year%4==0 && year%100!=0) || year%400==0)
{
return 1; //是闰年
}
else
{
return 0; //不是闰年
}
}

int passday(struct date date) //该年的第几天(包括闰年+1)
{
int i;
int day=1;
for(i=1;i<date.mouth;i++)
{
if(i==2)
{
if(leafyear(date.year))
{
day+=29;
}
else
{
day+=28;
}
continue;
}
if(i==4 || i==6 || i==9 || i==11)
{
day+=30;
}
else
{
day+=31;
}
}
day+=date.day;
return day;
}

#4
lmw1102007-10-10 01:20
看看,学习一下
#5
qq34121552007-10-10 08:02

重新发一个,上面的貌似有BUG
#include<stdio.h>
#include<math.h>
int leafyear(int year);
int passday(struct date date);

struct date
{
int year;
int mouth;
int day;
};

void main()
{
struct date a,b;
int i,count=0;
int day=0; //最后的结果
printf("请输入第一个日期<年 月 日>: ");
scanf("%d%d%d",&a.year,&a.mouth,&a.day);
printf("请输入第二个日期<年 月 日>: ");
scanf("%d%d%d",&b.year,&b.mouth,&b.day);

if(a.year==b.year)
{
day=abs(passday(a)-passday(b)); //abs()求绝对值
}

if(a.year<b.year)
{
for(i=0;i<(b.year-a.year)-1;i++)
{
if(leafyear(a.year+i+1))
{
count++;
}
}
if(i==0)
{
day=(((leafyear(a.year)+365)-passday(a))+passday(b))+365*i+count;
}
else
{
day=(((leafyear(a.year)+365)-passday(a))+passday(b))+365*(i-1)+count;
}
}

if(a.year>b.year)
{
for(i=0;i<(a.year-b.year)-1;i++)
{
if(leafyear(b.year+i+1))
{
count++;
}
}
if(i==0)
{
day=(((leafyear(a.year)+365)-passday(a))+passday(b))+365*i+count;
}
else
{
day=(((leafyear(a.year)+365)-passday(a))+passday(b))+365*(i-1)+count;
}
}
printf("相差 %d 天!",day);
}

int leafyear(int year)
{
if((year%4==0 && year%100!=0) || year%400==0)
{
return 1; //是闰年
}
else
{
return 0; //不是闰年
}
}

int passday(struct date date) //该年的第几天(包括闰年+1)
{
int i;
int day=1;
for(i=1;i<date.mouth;i++)
{
if(i==2)
{
if(leafyear(date.year))
{
day+=29;
}
else
{
day+=28;
}
continue;
}
if(i==4 || i==6 || i==9 || i==11)
{
day+=30;
}
else
{
day+=31;
}
}
day+=date.day;
return day;
}

#6
spp2787315992007-10-10 08:09
回复:(weiweizkk)c++如何编写一个求任意2个日期的天...
#7
放纵思想2007-10-11 00:37
好,不错.
#8
雨中飞燕2007-10-11 02:09
这样写并不好,不但增加了复杂度还增加出错机会



by 雨中飞燕 QQ:78803110 C/C++讨论群:46520219
[url=http://yzfy.org/]C/C++算法习题(OnlineJudge):[/url] http://yzfy.programfan.com

[url=http://bbs.bc-cn.net/viewthread.php?tid=163571]请大家不要用TC来学习C语言,点击此处查看原因[/url] [url=http://blog.programfan.com/article.asp?id=24801]请不要写出非int声明的main函数[/url]
[url=http://bbs.bc-cn.net/viewthread.php?tid=162918" target="_blank">https://yzfy.org/
Blog: http://yzfy.programfan.com

[url=http://bbs.bc-cn.net/viewthread.php?tid=163571]请大家不要用TC来学习C语言,点击此处查看原因[/url] [url=http://blog.programfan.com/article.asp?id=24801]请不要写出非int声明的main函数[/url]
[url=http://bbs.bc-cn.net/viewthread.php?tid=162918
]C++编写的Windows界面游戏[/url]
#9
weiweizkk2007-10-11 15:31
谢谢3楼的朋友~~~但不知道这个论坛怎么给分呢....呵呵~非常感谢您的帮助!!!
#10
weiweizkk2007-10-16 19:36

老师说必须用类做...请大家再帮我想一想吧~~~~

1