我采用的是维基百科上的算法
把四个数加起来然后同余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); } }
如果有不对的地方,请批评指正;
版权声明:本文为博主原创文章,未经博主允许不得转载。