如何从给定日期找到星期几?

时间:2013-08-06 07:56:21

标签: java bluej

这是我用来计算天数差异的代码: 将'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);
}

2 个答案:

答案 0 :(得分:0)

这绝对是解决这个问题的大方法。看起来你的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);
}

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

答案 1 :(得分:-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;