标题:请问有没有什么能计算任意两个日期之间的天数?
只看楼主
ilsoviet1917
Rank: 2
等 级:论坛游民
帖 子:103
专家分:26
注 册:2010-5-11
结帖率:84.21%
 问题点数:0 回复次数:11 
请问有没有什么能计算任意两个日期之间的天数?
我在书上看了一个:
对于一个给定日期,通过公式计算出一个值:N=1461 x f (年,月) / 4 + 153 x g(月) / 5 + 日

如果月 <= 2,年 - 1,月 + 13,否则年不变,月 + 1。

比如2004/8/8的N值是

N = 1461 x f(2004, 8) / 4 + 153 x g(8) / 5 +3
   = (1461 x 2004) / 4 + (153 x 9(因为大于二月,所以这里月份+1)) / 5 + 3
  = 2927844/ 4 + 1377 / 5 + 3
   = 731961 + 275 + 3
  = 732239

不明白最后+3什么意思,是不是书上错了?

2006年有人在论坛发过类似的问题,不过没个结果~


[ 本帖最后由 ilsoviet1917 于 2010-6-10 01:34 编辑 ]
搜索更多相关主题的帖子: 天数 
2010-06-10 01:32
韩明海
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:253
专家分:749
注 册:2010-4-3
得分:0 
很显然他计算的不是2004.8.8,二十2004.8.3
其实这个并不难,例如2004.8.8-----2010.5.4
你可以先求2004.8.8到2004.12.31
然后求2005,2005,2006,2007,2008,2009每年有多少天
然后计算2010.1.1到2010.5.4多少天
2010-06-10 18:29
ilsoviet1917
Rank: 2
等 级:论坛游民
帖 子:103
专家分:26
注 册:2010-5-11
得分:0 
嘿嘿~其实这是个函数与结构的练习题。我写了一个,但是编译不成功,函数和结构还是没理解透啊~

程序代码:
#include <stdio.h>
struct date
{
    int day;
    int month;
    int year;
};
int valueOfYear (struct date d)
{
    int year;
  
    if (d.month <= 2)
        year = d.year - 1;
    else
        year = d.year;
    return year;
}
int valueOfMonth (struct date d)
{
    int month;
    if (d.month <= 2)
        month = d.month + 13;
    else
        month = d.month + 1;
    return month;
}
int days (void)
{
    int valueOfYear (struct date d);
    int valueOfMonth (struct date d);
    int days;
    days = (1461 * valueOfYear (d.year)) / 4 + (153 * valueOfMonth(d.month)) / 5 + d.day;
    return days;
}
int main (void)
{
    struct date value1, value2;
    printf ("输入第一组日期(日 月 年):");
    scanf ("%i%i%i", &value1.day, &value1.month, &value1.year);
    int N1 = days();
    printf ("输入第二组日期(日 月 年):");
    scanf ("%i%i%i", &value2.day, &value2.month, &value2.year);
    int N2 = days();
    int N = N2 - N1;
    printf ("i%\n", N);
    return 0;
  
}










2010-06-10 20:06
ilsoviet1917
Rank: 2
等 级:论坛游民
帖 子:103
专家分:26
注 册:2010-5-11
得分:0 
为啥没人搭理我,都忙着看球了么
2010-06-11 09:21
DMS
Rank: 2
等 级:论坛游民
帖 子:54
专家分:48
注 册:2009-6-28
得分:0 
错了太多了。过两天我写一个给你算了
2010-06-11 18:26
DMS
Rank: 2
等 级:论坛游民
帖 子:54
专家分:48
注 册:2009-6-28
得分:0 
#include <stdio.h>
struct date
{
    int day;
    int month;
    int year;
};
int valueOfYear (struct date d)
{
    int year;
  
    if (d.month <= 2)
        year = d.year - 1;
    else
        year = d.year;
    return year;
}
int valueOfMonth (struct date d)
{
    int month;
    if (d.month <= 2)
        month = d.month + 13;
    else
        month = d.month + 1;
    return month;
}
int days (struct date d)
{
    int valueOfYear (struct date d);
    int valueOfMonth (struct date d);
    int days;
    days = (1461 * valueOfYear (d)) / 4 + (153 * valueOfMonth(d)) / 5 + d.day;
    return days;
}
int main (void)
{
    int N,N1,N2;
    struct date value1, value2;
    printf ("输入第一组日期(日 月 年):");
    scanf ("%i%i%i", &value1.day, &value1.month, &value1.year);
    N1 = days(value1);
    printf ("输入第二组日期(日 月 年):");
    scanf ("%i%i%i", &value2.day, &value2.month, &value2.year);
    N2 = days(value2);
    N = N2 - N1;
    printf ("i%\n", N);
    return 0;
  
}

2010-06-11 18:28
DMS
Rank: 2
等 级:论坛游民
帖 子:54
专家分:48
注 册:2009-6-28
得分:0 
编译过了.不知道结果能不能过?
2010-06-11 18:29
DMS
Rank: 2
等 级:论坛游民
帖 子:54
专家分:48
注 册:2009-6-28
得分:0 
days = (1461 * valueOfYear (d.year)) / 4 + (153 * valueOfMonth(d.month)) / 5 + d.day;
没发现类型错了?
2010-06-11 18:31
DMS
Rank: 2
等 级:论坛游民
帖 子:54
专家分:48
注 册:2009-6-28
得分:0 
printf ("i%\n", N);
......
%i
2010-06-11 18:34
ilsoviet1917
Rank: 2
等 级:论坛游民
帖 子:103
专家分:26
注 册:2010-5-11
得分:0 
人比较笨,8楼9楼说明白点吧
2010-06-12 02:44



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




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

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