1 import java.util.Scanner;
2
3 public class MyCalendar {
4 /*
5 * 从控制台输入 × × × ×年× ×月,从控制台输出该月日历 (1900年1月1日是星期一)
6 *
7 */
8
9 public static void main(String[] args) {
10 Scanner sc = new Scanner(System.in);
11
12 // 获得输入的那一年的天数
13 // public void isYear() {
14 System.out.println("请输入年");
15 int getYear = sc.nextInt();// 获得年
16 int isR = 0;// 是闰年计数
17 // 判断几个平年几个闰年
18 for (int i = 1900; i < getYear; i++) {
19 // 判断是否是闰年:能被4整除但不能被100整除;或者能被400整除
20 if (i % 400 == 0 || (i % 4 == 0 && i % 100 != 0)) {
21 isR++;
22 }
23 // 到该年的一月一号有多少天
24 }
25 int allYearDay = isR * 366 + (getYear - 1900 - isR) * 365;
26 // 判断输入的这一年是平年还是闰年
27 int isRight = (getYear % 400 == 0 || getYear % 4 == 0 && getYear % 100 != 0) ? 366 : 365;
28
29 // 获得输入的那个月的天数
30 // public void isMonth() {
31 System.out.println("请输入月");
32 int getMonth = sc.nextInt();
33 // 闰年2月:29天
34 // 平年2月:28天
35 // 口诀
36 // 一三五七八十腊
37 // 三十一天永不差
38 // 四六九冬三十整
39 // 平年二月二十八
40 // 闰年二月把一加
41 // 这里面的腊月指十二月
42 // 冬指的是十一月
43 // 闰年是年数除四能除尽的
44 // 平年是除了闰年的年
45 // 判断几个大月几个小月
46 int allMonthDay = 0;
47 int DayOf_getMonth = 0;
48
49 for (int i = 1; i <= getMonth; i++) {
50 int day = 0;
51 switch (i) {
52 case 1:
53 case 3:
54 case 5:
55 case 7:
56 case 8:
57 case 10:
58 case 12:
59 day = 31;
60 break;
61 case 4:
62 case 6:
63 case 9:
64 case 11:
65 day = 30;
66 break;
67 case 2:
68 if (isRight == 366) {
69 day = 29;
70 } else {
71 day = 28;
72 }
73 break;
74 }// 算今年这几个月有多少天 不加上要的那个月的天数
75 if (i == getMonth) {
76 // 得到输入那个月的天数
77 DayOf_getMonth = day;
78
79 } else {
80 allMonthDay += day;
81
82 }
83 }
84 // 算一下总天数 //出去输入的那个月
85 int totalDays = allYearDay + allMonthDay;
86 // System.out.println(DayOf_getMonth);
87 // System.out.println(allYearDay);
88 // System.out.println(allMonthDay);
89 // System.out.println(totalDays);
90 System.out.print("星期天\t" + "星期一\t" + "星期二\t" + "星期三\t" + "星期四\t" + "星期五\t" + "星期六\t");
91 System.out.println();
92 /*
93 * 要算星期几,得有已知条件:如2014年1月1日是星期三,那么2015年1月1日是星期几
94 * 计算方法:先求出天数,(也就是2014年1月1日过多少天是2015年1月1日:365天)
95 * 再求余数,(则365÷7=52周余1天),最后算日期:余数+星期几=1+3=4,也就是星期四
96 */
97 int firstDay = totalDays % 7 + 1;// firstDay是星期几
98 // 记一下空格数,用来换行
99 int isFlag = 0;
100 for (int j = 0; j < firstDay; j++) {
101 isFlag++;
102 System.out.print(" \t");
103 }
104 for (int m = 1; m <= DayOf_getMonth; m++) {
105 if (m < 10) {
106 System.out.print(" " + m + "\t");
107 } else {
108 System.out.print(m + "\t");
109 }
110 if ((isFlag + m) % 7 == 0) {
111 System.out.println();
112
113 }
114
115 }
116
117 }
118 }