-2

为什么 Jan Month 中的任何一天在我的代码中给了我错误的 DAY?(仅发生在 1994 年)

public class Ques1
{
public static void main(String args[])
    {

//假设我们知道 2007 年 6 月 6 日是星期三,将 0,1,2,3...6 分配给 Mon,Tue,Wed...Sun

    int my_birth_year = 1996;
    int my_birth_month = 1;
    int my_birth_date = 2;
    int j = 2;
    for(int i = 2006;i>=(my_birth_year);i--)
    {
        if((i+1)%4==0 || (i+1)%400==0)
        {j = ((j-2)+7)%7;if(j<0) j = j*-1;}
        else if(i%100==0)
        {j = ((j-1)+7)%7;if(j<0) j = j*-1;}
        else
        {j = ((j-1)+7)%7;if(j<0) j = j*-1;}
    }
    System.out.println(j);//day on 6th June my_birth_YEAR
    int june = 6;
    int days_june = 30;
    if( june< my_birth_month)
    {
        int d,s;
        int h = my_birth_month - june;
        switch(h)
        {
        case 1 : d = 24 + my_birth_date;
                     j = (j+(d%7))%7; break;
        case 2 : d = 24 + 31 + my_birth_date;
                     j = (j+(d%7))%7; break;
        case 3 : d = 24 + 31+ 31+my_birth_date;
                 j = (j+(d%7))%7; break;
        case 4 : d = 24 + 31 +31+30+ my_birth_date;
                 j = (j+(d%7))%7; break;
        case 5 : d = 24 + 31+31+30+30+my_birth_date;
                 j = (j+(d%7))%7; break;
        case 6 : d = 24 + 31 +31+30+31+30+ my_birth_date;
                 j = (j+(d%7))%7; break;
        default : break;
        }
    }
    else if(june > my_birth_month)
    {
    int d;
    int h = june - my_birth_month;
        switch(h)
        {
        case 1 : d = 6+(31-my_birth_date);
             j = (-j+(d%7))%7; break;
        case 2 : d = 6 + 31 +30 - my_birth_date;
             j = (-j+(d%7))%7; break;

        case 3 : d = 6 + 31+ 30+31-my_birth_date;
             j = (-j+(d%7))%7; break;

        case 4 :if(my_birth_year %4 == 0 || my_birth_year%400 == 0)
                d = 6 + 31 +30+31+ 29 - my_birth_date;
            else
                d = 6 + 31 +30+31+ 28 - my_birth_date;
            j = (-j+(d%7))%7; break;

这是一月份的情况:

        case 5 :if(my_birth_year %4 == 0 || my_birth_year%400 == 0)
                d = 6 + 31 +30+31+ 29 +31 - my_birth_date;
            else
                d = 6 + 31 +30+31+ 28 + 31 - my_birth_date; 
            j = (-j+(d%7))%7; break;
        default : break;
        }
    }
    if(j<0) j = j*-1;
    switch (j)
    {
        case 0 : System.out.println("Monday");
             break;

        case 1 : System.out.println("Tuesday");
             break;

        case 2 : System.out.println("Wednesday");
             break;

        case 3 : System.out.println("Thursday");
             break;

        case 4 : System.out.println("Friday");
             break;

        case 5 : System.out.println("Saturday");
             break;

        case 6 : System.out.println("Sunday");
             break;

        default : System.out.println("Error");
             break;
    }
}

}

PS:我正在编写代码而不使用 API

4

1 回答 1

1

你的代码在各个方面都是令人发指的。我猜你没有意识到Date 和 Calendar 类中的月份是从零开始的,所以一月 = 0,十二月 = 11。

于 2013-09-19T09:29:00.843 回答