Java控制台打印简单日历
打印任一正数年每一月的日历:
注意:公元元年1月1日是星期六
1 import java.io.BufferedReader;
2 import java.io.IOException;
3 import java.io.InputStreamReader;
4
5 public class TestCal {
6 static int year, monthDay, weekDay;
7
8 public static boolean isLeapYear(int y) {
9 return ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0));// 判断闰年
10 }
11
12 /**
13 * 判断该年第一天是星期几
14 *
15 * @param y
16 */
17 public static int firstDay(int y) {
18 long n = y * 365;
19 for (int i = 1; i < y; i++) {
20 if (isLeapYear(y)) {
21 n++;
22 }
23 }
24
25 return (int) (n - 2)%7;//公元1年1月1日是星期六
26 }
27
28 /**
29 * 打印表头
30 */
31 public static void printWeek() {
32 System.out.println("================================");
33 System.out.println("日 一 二 三 四 五 六");
34 }
35
36 /**
37 * 获取每个月的天数
38 * @param m
39 * @return
40 */
41 public static int getMonday(int m) {
42 switch (m) {
43 case 1:
44 case 3:
45 case 5:
46 case 7:
47 case 8:
48 case 10:
49 case 12:
50 return 31;
51 case 4:
52 case 6:
53 case 9:
54 case 11:
55 return 30;
56 case 2:
57 if (isLeapYear(year)) {
58 return 29;
59 } else {
60 return 28;
61 }
62 default:
63 return 0;
64 }
65 }
66
67 /**
68 * 打印月份
69 */
70 public static void printMonth(){
71
72 for(int m = 1; m <= 12; ++m){
73 System.out.println(m + "月" );
74 printWeek();
75
76 for(int j = 1; j <= weekDay; ++j){//按每月第一天是星期几打印相应的空格
77 System.out.print(" ");
78 }
79
80 int monthDay = getMonday(m);//获取每个月的天数
81
82 for(int d = 1; d <= monthDay; ++d){
83
84 System.out.printf("%-5d",d);
85
86 weekDay = (weekDay +1) % 7;
87
88 if(weekDay == 0){
89 System.out.println();
90 }
91
92 }
93 System.out.println('\n');
94
95 }
96 }
97
98 public static void main(String[] args) throws IOException {
99 System.out.print("请输入一个年份:");
100 InputStreamReader ipsr;
101 BufferedReader bfr;
102
103 ipsr = new InputStreamReader(System.in);
104 bfr = new BufferedReader(ipsr);
105
106 String s = bfr.readLine();
107
108 year = Integer.parseInt(s);
109 weekDay = firstDay(year);
110
111
112 System.out.println("\n " + year + " 年");
113 printMonth();
114 }
115 }
打印结果:
请输入一个年份:2013 2013 年 1月 ================================ 日 一 二 三 四 五 六 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 2月 ================================ 日 一 二 三 四 五 六 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 3月 ================================ 日 一 二 三 四 五 六 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 4月 ================================ 日 一 二 三 四 五 六 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 5月 ================================ 日 一 二 三 四 五 六 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 6月 ================================ 日 一 二 三 四 五 六 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 7月 ================================ 日 一 二 三 四 五 六 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 8月 ================================ 日 一 二 三 四 五 六 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 9月 ================================ 日 一 二 三 四 五 六 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 10月 ================================ 日 一 二 三 四 五 六 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 11月 ================================ 日 一 二 三 四 五 六 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 12月 ================================ 日 一 二 三 四 五 六 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31