Java 如何从给定日期查找一周中的某一天?

Java 如何从给定日期查找一周中的某一天?,java,bluej,Java,Bluej,这是我用来计算天数差异的代码: 把“n”值作为我使用的计数。在此之后,我将使用n%7,并使用剩余部分来获得一天。我使用的参考日期是2000年1月1日,这是一个星期六。 然而,n总是给出0。为什么?怎么了 我不能使用CALENDAR类。它必须是数学的 public static void main(int d1, int d2, int m1, int m2, int y1, int y2) { int n =0; for(;d1!=d2&&m1!=m2&&

这是我用来计算天数差异的代码: 把“n”值作为我使用的计数。在此之后,我将使用n%7,并使用剩余部分来获得一天。我使用的参考日期是2000年1月1日,这是一个星期六。 然而,n总是给出0。为什么?怎么了


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

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

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

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

你应该使用
Calendar
类。你应该让你的代码更可读。你的代码完全不可读。一些缩进将很好地解决代码问题。很抱歉缩进开始了。“我不能使用日历类。它必须是数学类。”
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);
}