标题:计算日期差的问题 求指点
只看楼主
Aa1060030551
Rank: 1
等 级:新手上路
帖 子:40
专家分:0
注 册:2017-3-19
结帖率:83.33%
已结贴  问题点数:15 回复次数:10 
计算日期差的问题 求指点
计算日期差 就是在我输入的1999 4 1和2000 4 1时它输出了365 但是应该是366 求教怎么改……
程序代码:
#include
#define isPrime(year) ((year%4==0&&year%100!=0)||(year%400==0))
struct date
{
    int year;
    int month;
    int day;
};
int main(void)
{   
    int dateDiff(struct date mindate,struct date maxdate);
    struct date mindate,maxdate;
    int days;
    scanf("%i %i %i",&mindate.year,&mindate.month,&mindate.day);
    scanf("%i %i %i",&maxdate.year,&maxdate.month,&maxdate.day);
    days=dateDiff(mindate,maxdate);   

 printf("%d\n",days);
    return 0;
}
int dateDiff(struct date mindate,struct date maxdate)
{
    int days=0,j,flag;
    const int primeMonth[][12]={{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,30,31,31,30,31,30,31}};
    struct date tmp;
    if ((mindate.year>maxdate.year)|| (mindate.year==maxdate.year&&mindate.month>maxdate.month)||(mindate.year==maxdate.year&&mindate.month==maxdate.month&&mindate.day>maxdate.day))
    {
        tmp=mindate;
        mindate=maxdate;
        maxdate=tmp;
    }   
    for(j=mindate.year;j<MAXDATE.YEAR;++J)
        days+=isPrime(j)?366:365;
    flag=isPrime(maxdate.year);
    for (j=1;j<MAXDATE.MONTH;J++)
        days+=primeMonth[flag][j-1];
        flag=isPrime(maxdate.year);
        for (j=1;j<MINDATE.MONTH;J++)
          days-=primeMonth[flag][j-1];
        days=days+maxdate.day-mindate.day;
        return days;
} 












[此贴子已经被作者于2017-6-21 10:17编辑过]

搜索更多相关主题的帖子: year struct date int flag 
2017-06-20 17:12
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:5 
2000年本来就是闰年啊  

DO IT YOURSELF !
2017-06-20 17:30
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:5 

 
上述情况图片传不上来 输入情况是:
2000 2 25
2000 3 1
输出了:5
但是应该输出4 所以我该改哪里呢?
这个日期差如何计算 算不算头尾  这都有待研究

比如你这个例子:
25 26 27 28 29 1  这是算首尾6天
   26 27 28 29    这应该是纯粹的差 4天
要是算头不算尾 或者算尾不算头 是5天

DO IT YOURSELF !
2017-06-20 17:32
Aa1060030551
Rank: 1
等 级:新手上路
帖 子:40
专家分:0
注 册:2017-3-19
得分:0 
以下是引用wp231957在2017-6-20 17:32:56的发言:

这个日期差如何计算 算不算头尾  这都有待研究

比如你这个例子:
25 26 27 28 29 1  这是算首尾6天
   26 27 28 29    这应该是纯粹的差 4天
要是算头不算尾 或者算尾不算头 是5天

我就直接回您这一条回复了 2000年确实是闰年我记错了 那可能出了问题的是1000年的数据 是算头不算尾的 具体是那组数据出了问题我也不清楚....我那个系统交了不能看评判
2017-06-20 21:56
peng880610
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:128
专家分:123
注 册:2017-3-29
得分:0 
你这两个for循环J都是大写的,能通过编译吗?
2017-06-21 00:45
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1817
专家分:3681
注 册:2011-3-24
得分:5 
我记得是两边都先转格林威治时间后相减再代入C的时间结构中取得时间差

写错了,是一长串长整数的时间转换,我忘了那叫什么

然后减出来的值代入C内建的时间结构,他会自动帮你转成年月日,省掉闰的计算问题,太久了有点忘了。

只是记得还要自己加减自己时区的时间

应该是要先include <time.h>才能用那结构

[此贴子已经被作者于2017-6-21 03:23编辑过]


不要選我當版主
2017-06-21 02:59
Aa1060030551
Rank: 1
等 级:新手上路
帖 子:40
专家分:0
注 册:2017-3-19
得分:0 
回复 5楼 peng880610
能啊……
2017-06-21 09:02
Aa1060030551
Rank: 1
等 级:新手上路
帖 子:40
专家分:0
注 册:2017-3-19
得分:0 
回复 6楼 wube
非常难过了……还有办法在这个程序上改吗
2017-06-21 09:03
Aa1060030551
Rank: 1
等 级:新手上路
帖 子:40
专家分:0
注 册:2017-3-19
得分:0 
回复 5楼 peng880610
我自己的代码是小写 粘过来变成了大写
2017-06-21 09:06
Aa1060030551
Rank: 1
等 级:新手上路
帖 子:40
专家分:0
注 册:2017-3-19
得分:0 
我发现我的错误不是这的问题……我很恐慌 我去调调
2017-06-21 09:19



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-478789-1-1.html




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

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