曜日を計算する関数

さて、年月日がわかっていれば、曜日は確定できる。つまり、カレンダのことだ。ならば、a年b月c日の曜日として、月曜日なら1、火曜日なら2……、土曜日なら6、日曜日なら7が計算できる式が、a, b, cを使って書けるはずである。その式に3つの数字を代入すれば、たちどころに曜日が計算できるわけだ。これがあれば、カレンダなんかいらない。何故、この曜日を求める公式、すなわち一般解が一般に普及しないのだろうか。

http://blog.mf-davinci.com/mori_log/archives/2008/01/post_1610.php

に触発されて、Javaで書いてみました。西暦ベースで年月日を渡すと、日〜土を 1〜7の数値で返します。この値は java.util.Calendarの曜日の値と同じになっています。
以下、ソース。

public class CalcWeekDay {
	public static int getWeekDay(int year, int month, int day) {
		int week = year + 10; // -(-16 + 6)
		week += week / 4;
		week += isLeepYear(year - 1)? 1: 0;

		switch (month) {
			case 12:
				week += 2;
			case 11:
				week += 3;
			case 10:
				week += 2;
			case 9:
				week += 3;
			case 8:
				week += 3;
			case 7:
				week += 2;
			case 6:
				week += 3;
			case 5:
				week += 2;
			case 4:
				week += 3;
			case 3:
				week += isLeepYear(year)? 1: 0;
			case 2:
				week += 3;
			case 1:
				break;
		}
		week += day - 1;
		return (week % 7) + 1;
	}
	public static boolean isLeepYear(int year) {
		return (year % 4 == 0) && ((year % 100 != 0) || (year % 400 == 0));
	}

	public static void main(String[] args) {
		for (int year = 2007; year <= 2008; year++) {
			for (int month = 1; month <= 12; month++) {
				for (int day = 1; day <= 20; day++) {
					final int weekDay = getWeekDay(year, month, day);
					System.out.println(year + "/" + month + "/" + day + ": week=" + weekDay);
				}
			}
		}
	}
}