基姆拉尔森计算公式用于计算一周内的日期。比如给你年月日,从而计算今天是星期几。
基姆拉尔森公式
Week = (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1) mod 7, 3<=m<=14
Week的取值范围是0 ~ 6,其中0代表星期日,1 ~ 6分别代表星期一到星期六。注意在运算时要把1月和2月看为是上一年的13月和14月代入计算!
int Date(int y,int m,int d)
{
if(m==1||m==2){//一二月换算
m+=12;
y--;
}
int week = (d + 2*m +3*(m+1)/5 + y + y/4 - y/100 + y/400 + 1)%7;
return week;//其中0~6表示周日、周一到周六
}
计算今天是周几
public static void dateToWeek1(){
Scanner scanner = new Scanner(System.in);
// 声明 int 类型的变量 y 用来获取控制台输入的年
System.out.print("年:");
int y = scanner.nextInt();
// 声明 int 类型的变量 m 用来获取控制台输入的月
System.out.print("月:");
int m = scanner.nextInt();
// 声明 int 类型的变量 d 用来获取控制台输入的日
System.out.print("日:");
int d = scanner.nextInt();
/********** Begin **********/
// 第一步,判断变量 m 的值是否是 1 或者 2。如果是,则变量 m 在原来的基础上加12,同时变量 y 在原来的基础上减1
if (m == 1 || m == 2) {
m += 12;
y--;
}
// 第二步,使用基姆拉尔森日期公式,计算星期几
int iWeek = (d + 2 * m + 3 * (m + 1) / 5 + y + y / 4 - y / 100 + y / 400) % 7;
// 第三步,使用多路分支判断星期几。如果是星期一,则在控制台输出"星期一";如果是星期二,则在控制台输出"星期二"....以此类推,如果是星期日,就是在控制台输出"星期日"
switch (iWeek) {
case 0:
System.out.print("星期一");
break;
case 1:
System.out.print("星期二");
break;
case 2:
System.out.print("星期三");
break;
case 3:
System.out.print("星期四");
break;
case 4:
System.out.print("星期五");
break;
case 5:
System.out.print("星期六");
break;
case 6:
System.out.print("星期日");
break;
}
/********** End **********/
}