1
2 public class ComputerWeek {
3
4 /**
5 * 计算某一个日期是星期几
6 * @param year 年
7 * @param month 月
8 * @param day 日
9 * @return 星期
10 */
11 public int getWeek(int year, int month, int day) {
12 // 首先我们知道2008-01-07是星期一
13 int weeks[] = {1,2,3,4,5,6,7};
14 int standardDay = getDaysFromAD(2008, 1, 7);
15 int temps = getDaysFromAD(year,month,day);
16 temps = temps - standardDay;
17 if (temps >= 0) {
18 temps %= 7;
19 return weeks[temps];
20 } else {
21 temps %=7;
22 temps += 7;
23 temps %= 7;
24 return weeks[temps];
25 }
26 }
27
28 /**
29 * 计算从公元1年1月1号 到这个日期的天数
30 * @param year
31 * @param month
32 * @param day
33 * @return
34 */
35 public int getDaysFromAD(int year, int month, int day) {
36 int days = 0;
37 for (int i = 1; i < year; i++) {
38 if (isLeapYear(i)) {
39 days += 366;
40 } else {
41 days += 365;
42 }
43 }
44 for (int i = 1; i < month; i++) {
45 if (i == 1 || i == 3 || i == 5 || i == 7 || i == 8 || i == 10 || i == 12) {
46 days += 31;
47 } else if (i == 2) {
48 if (isLeapYear(year)) {
49 days += 29;
50 } else {
51 days += 28;
52 }
53 } else {
54 days += 30;
55 }
56 }
57 days += day;
58 return days;
59 }
60
61 /**
62 * 判断是否为闰年
63 * @param year
64 * @return
65 */
66 public boolean isLeapYear(int year) {
67 if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
68 return true;
69 } else {
70 return false;
71 }
72 }
73
74 public static void main(String args[]) {
75 System.out.println(new ComputerWeek().getWeek(2008,12,31));
76 }
77 }
78
</script>