//求一个日期是星期几,公式:总天数 = 平年累计值 + 闰年累计值 + 当年前几月累计天数 + 本月累计天数
public class Main {
public static void main(String[] args){
int year=2016,month=12,day=31;
boolean leap= year%400==0 || year%100!=0 && year%4==0; //判断闰年
int total=year-1980+(year-1980+3)%4; //求平年闰年累计总天数
//因为平年365%7=1,闰年366%7=2,所以平闰年只需加1或2即可,且1980年的闰年不计
for(int i=month-1;i>0;i--){ //计算前几月累计天数
switch(i){
case 1 : case 3 : case 5 : case 7 : case 8: case 10 : case 12 : total+=31; break;
case 2: total += leap ? 28 : 29 ; break;
case 4: case 6: case 9 : case 11: total+=30; break;
}
}
total+=day; //加上当月的天数
int week=1; //1987.12.31是星期一,假设星期日是0,星期一是1 ... 星期六是6,则week起始值是1;
week=(week+total)%7; //求的是星期几
System.out.print(year+"年"+month+"月"+day+"日 星期");
switch(week){
case 0: System.out.println("日"); break;
case 1: System.out.println("一"); break;
case 2:System.out.println("二"); break;
case 3: System.out.println("三"); break;
case 4:System.out.println("四"); break;
case 5:System.out.println("五");break;
case 6: System.out.println("六");break;
}
}
}