0

这是我用来计算天数差异的代码:将“n”值视为我用作计数的值。在此之后,我使用 n%7 并使用剩余的时间来获得这一天。我使用的参考日期是 1.1.2000,这是一个星期六。但是,n 总是给出 0。为什么?怎么了 ?

我不能使用日历类。它必须是数学的。

public static void main(int d1, int d2, int m1, int m2, int y1, int y2)
{
    int n =0;
    for(;d1!=d2&&m1!=m2&&y1!=y2;n++)
    {
        if(m1==1 || m1==3 || m1==5 || m1==7 || m1==8 || m1==10 || m1==12)
        {
            if(d1==31)
            {
                m1++;
                d1=1;
                n++;
                if(m1>12)
                {
                    m1=1;
                    y1++;
                }
            }
            else
            {
                d1++;
                n++;
            }
        }
        else if(m1==4 || m1==6 || m1==9 || m1==11)
        {
            if(d1==30)
            {
                m1++;
                d1=1;
                n++;
                if(m1>12)
                {
                    m1=1;
                    y1++;
                }
            }
            else
            {
                d1++;
                n++;
            }
        }
        else if(m1==2)
        {
            if(returnLeap(y1))
            {
                if(d1==29)
                {
                    m1++;
                    d1=1;
                    n++;
                }
                else
                {
                    d1++;
                    n++;
                }
            }
            else
            {
                if(d1==28)
                {
                    m1++;
                    d1=1;
                    n++;
                }
                else
                {
                    d1++;
                    n++;
                }
            }
        }
    }
    System.out.println(n);
}
4

2 回答 2

0

这绝对是解决这个问题的大 O 方式。看起来您的 for 循环将在日、月或年中的任何一个匹配时终止。您可能打算在所有 3 个匹配时终止,例如

for(;d1!=d2||m1!=m2||y1!=y2;n++)

如果您愿意接受其他建议,怎么样

public static void main(int d, int m, int y)
{
   int n = (d + 5 * ((year - 1) % 4) + 4 * ((year - 1) % 100) + 6 * ((year - 1) % 400)) % 7;

   switch (m) {
        case 12: n += 30;
        case 11: n += 31;
        case 10: n += 30;
        case 9:  n += 31
        case 8:  n += 31;
        case 7:  n += 30
        case 6:  n += 31
        case 5:  n += 30
        case 4:  n += 31
        case 3:  n += 28;
                 if(returnLeap(y)) { n++; }
        case 2:  n += 31;
    }
    System.out.println(n % 7);
}

这是基于高斯的算法(那家伙是个天才)。

于 2013-08-06T08:07:56.613 回答
-2
Calendar cal = Calendar.getInstance();
cal.set(2013, 7, 1);
Date startDate = cal.getTime();

cal.clear();
cal.set(2013, 8, 1);
Date endDate = cal.getTime();

long diffDays = (endDate.getTime() - startDate.getTime()) / 1000 / 60 / 60 / 24;
于 2013-08-06T08:07:52.110 回答