某年某月某日是星期几的算法思想和编程

我采用的是维基百科上的算法

把四个数加起来然后同余7就是所求的星期数。这四个数分别是:

C:2(3-(c mod4))

Y:(y mod28+[y mod28/4])mod7(闰年1、2月份Y-1)

M:((3.4+(m-3)mod12×2.6)mod7(1、2月份M值分别为7,3

D:d mod7

就是说——W=(C+Y+M+D)mod7

举例说明:2008年12月10日

(6+3+5+3)mod7=3,即该日是星期三,其中c=20、y=8、m=12、d=10

再举一例:2008年2月10日

(6+2+3+3)mod7=0,即该日是星期日,其中c=20、y=8、m=2、d=10

还举一例:1842年8月29日

(2+3+2+1)mod7=1,即该日是星期一,其中c=18、y=42、m=8、d=29



public class Today
{
    public static void main(String[] args)
    {
            String[] a = null;
            System.out.println("请输入年月日,以逗号隔开:");
            Scanner sc = new Scanner(System.in);
            String str = sc.next();
            a = str.split(",");
            int y = Integer.valueOf(a[0]);
            int m = Integer.valueOf(a[1]);
            int d = Integer.valueOf(a[2]);
            
            int M = 0;
            int year = 0;
            int Y = 0;
            
            int a1 = y % 10;
            int a2 = y % 100/10;
            int a3 = y % 1000/100;
            int a4 = y / 1000;
            
            int c = a4*10+a3;    //得到世纪数;
//            得到年份;
            if (a2 == 0)
                year = a1;    
            else
                year = a2*10+a1;
            
            int C = 2*(3-(c % 4));
            
            if(m==1)
                M = 7;
            else if(m == 2)
                M = 3;
            else
                M = ((int) (3.4+(m-3)%12*2.6))%7;
            
            if(y%400==0||y%4==0&&y%100!=0&&m<3)
                Y = (year%28+(year%28)/4)%7-1;
            else
                Y = (year%28+(year%28)/4)%7;
            
            int D = d % 7;
            
            int week = (C + Y + M + D) % 7;
            
            String w = "日一二三四五六".substring(week, week+1);
            
        
            System.out.println(str + "是星期" + w);
            
        }

    }


如果有不对的地方,请批评指正;  


posted @ 2013-04-23 19:46  peng_gy  阅读(306)  评论(0编辑  收藏  举报