| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1053 人关注过本帖
标题:c++如何编写一个求任意2个日期的天数差?请大家指点~~
只看楼主 加入收藏
weiweizkk
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2007-7-6
收藏
 问题点数:0 回复次数:9 
c++如何编写一个求任意2个日期的天数差?请大家指点~~
谢谢~~~
搜索更多相关主题的帖子: 天数 编写 
2007-10-09 20:17
放纵思想
Rank: 1
来 自:中
等 级:新手上路
帖 子:29
专家分:0
注 册:2007-6-23
收藏
得分:0 
Debug.Print CDate("2005-11-9") - CDate("2005-9-8")
2007-10-09 21:39
qq3412155
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2007-10-9
收藏
得分:0 

#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;
}

2007-10-09 22:34
lmw110
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2007-3-26
收藏
得分:0 
看看,学习一下
2007-10-10 01:20
qq3412155
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2007-10-9
收藏
得分:0 

重新发一个,上面的貌似有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;
}

2007-10-10 08:02
spp278731599
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2007-10-9
收藏
得分:0 
回复:(weiweizkk)c++如何编写一个求任意2个日期的天...
2007-10-10 08:09
放纵思想
Rank: 1
来 自:中
等 级:新手上路
帖 子:29
专家分:0
注 册:2007-6-23
收藏
得分:0 
好,不错.
2007-10-11 00:37
雨中飞燕
Rank: 3Rank: 3
等 级:禁止访问
威 望:8
帖 子:2200
专家分:0
注 册:2007-8-9
收藏
得分:0 
这样写并不好,不但增加了复杂度还增加出错机会



by 雨中飞燕 QQ:78803110 C/C++讨论群:46520219
[url=http://yzfy.org/]C/C++算法习题(OnlineJudge):[/url] http://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]
2007-10-11 02:09
weiweizkk
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2007-7-6
收藏
得分:0 
谢谢3楼的朋友~~~但不知道这个论坛怎么给分呢....呵呵~非常感谢您的帮助!!!
2007-10-11 15:31
weiweizkk
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2007-7-6
收藏
得分:0 

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

2007-10-16 19:36
快速回复:c++如何编写一个求任意2个日期的天数差?请大家指点~~
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023861 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved