回答編集履歴
2
コード等追加
test
CHANGED
@@ -121,3 +121,23 @@
|
|
121
121
|
18 19 20 21 22 23 24
|
122
122
|
25 26 27 28 29 30 31
|
123
123
|
```
|
124
|
+
---
|
125
|
+
コメントに書いた、 i に下駄を履かせる(「0~(月初の曜日値-1) は前月を表す」)としたら…です。
|
126
|
+
(ご質問のコードの一部)
|
127
|
+
```java
|
128
|
+
//月初日が何曜日なのか設定
|
129
|
+
int startDay = cal.get(java.util.Calendar.DAY_OF_WEEK) - 1; //0=日曜, 1=月曜, ..., 6=土曜
|
130
|
+
int lastDay = cal.getActualMaximum(java.util.Calendar.DATE);
|
131
|
+
|
132
|
+
for(int i = 0; i < startDay + lastDay; i++){
|
133
|
+
if(i > 0 && i%7 == 0){
|
134
|
+
System.out.println();
|
135
|
+
}
|
136
|
+
|
137
|
+
if(i < startDay){
|
138
|
+
System.out.print(" ");
|
139
|
+
} else {
|
140
|
+
System.out.printf(" %2d", (i - startDay + 1));
|
141
|
+
}
|
142
|
+
}
|
143
|
+
```
|
1
コード追加等
test
CHANGED
@@ -1 +1,123 @@
|
|
1
|
-
例えば、 Calender には日付に加算する機能があり、必要なら内部の月や曜日等を自動で更新してくれます。これを利用すると、カレンダーを「月の開始日の属する週の日曜日」に設定し、その日から日付を1ずつ足していって月を調べ、表示対象月なら日を表示、対象月で無ければスペースを表示し、土曜日の後には改行を行い、月が対象月の翌月になったら終了する・・・といったことが出来ます。
|
1
|
+
例えば、 Calender には日付に加算する機能があり、必要なら内部の月や曜日等を自動で更新してくれます。これを利用すると、カレンダーを「月の開始日の属する週の日曜日」に設定し、その日から日付を1ずつ足していって月を調べ、表示対象月なら日を表示、対象月で無ければスペースを表示し、土曜日表示の後(もしくは日曜の前)には改行を行い、月が対象月の翌月になったら終了する・・・といったことが出来ます。
|
2
|
+
|
3
|
+
```java
|
4
|
+
import java.util.Calendar;
|
5
|
+
|
6
|
+
public class カレンダー {
|
7
|
+
public static void main(String[] args) {
|
8
|
+
for(int month=1; month<=12; month++) print(2022, month);
|
9
|
+
}
|
10
|
+
|
11
|
+
private static void print(int year, int month) {
|
12
|
+
System.out.println(year + "年" + month + "月");
|
13
|
+
System.out.print(" 日 月 火 水 木 金 土"); //改行しない(後の for で最初に改行するため)
|
14
|
+
|
15
|
+
for(Calendar cal = getStart(year, month, Calendar.SUNDAY); !isEnd(cal, month); cal.add(Calendar.DATE, 1)) {
|
16
|
+
if(cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) System.out.println();
|
17
|
+
System.out.printf(cal.get(Calendar.MONTH) == month-1 ? " %2d" : " ", cal.get(Calendar.DATE));
|
18
|
+
}
|
19
|
+
|
20
|
+
System.out.println();
|
21
|
+
}
|
22
|
+
|
23
|
+
private static Calendar getStart(int year, int month, int dayOfWeek) {
|
24
|
+
Calendar cal = Calendar.getInstance();
|
25
|
+
cal.set(year, month-1, 1);
|
26
|
+
while(cal.get(Calendar.DAY_OF_WEEK) != dayOfWeek) cal.add(Calendar.DATE, -1); //指定曜日まで戻る
|
27
|
+
return cal;
|
28
|
+
}
|
29
|
+
|
30
|
+
private static boolean isEnd(Calendar cal, int month) {
|
31
|
+
return cal.get(Calendar.MONTH) != month-1 && cal.get(Calendar.DATE) == 1;
|
32
|
+
}
|
33
|
+
}
|
34
|
+
```
|
35
|
+
```plain
|
36
|
+
2022年1月
|
37
|
+
日 月 火 水 木 金 土
|
38
|
+
1
|
39
|
+
2 3 4 5 6 7 8
|
40
|
+
9 10 11 12 13 14 15
|
41
|
+
16 17 18 19 20 21 22
|
42
|
+
23 24 25 26 27 28 29
|
43
|
+
30 31
|
44
|
+
2022年2月
|
45
|
+
日 月 火 水 木 金 土
|
46
|
+
1 2 3 4 5
|
47
|
+
6 7 8 9 10 11 12
|
48
|
+
13 14 15 16 17 18 19
|
49
|
+
20 21 22 23 24 25 26
|
50
|
+
27 28
|
51
|
+
2022年3月
|
52
|
+
日 月 火 水 木 金 土
|
53
|
+
1 2 3 4 5
|
54
|
+
6 7 8 9 10 11 12
|
55
|
+
13 14 15 16 17 18 19
|
56
|
+
20 21 22 23 24 25 26
|
57
|
+
27 28 29 30 31
|
58
|
+
2022年4月
|
59
|
+
日 月 火 水 木 金 土
|
60
|
+
1 2
|
61
|
+
3 4 5 6 7 8 9
|
62
|
+
10 11 12 13 14 15 16
|
63
|
+
17 18 19 20 21 22 23
|
64
|
+
24 25 26 27 28 29 30
|
65
|
+
2022年5月
|
66
|
+
日 月 火 水 木 金 土
|
67
|
+
1 2 3 4 5 6 7
|
68
|
+
8 9 10 11 12 13 14
|
69
|
+
15 16 17 18 19 20 21
|
70
|
+
22 23 24 25 26 27 28
|
71
|
+
29 30 31
|
72
|
+
2022年6月
|
73
|
+
日 月 火 水 木 金 土
|
74
|
+
1 2 3 4
|
75
|
+
5 6 7 8 9 10 11
|
76
|
+
12 13 14 15 16 17 18
|
77
|
+
19 20 21 22 23 24 25
|
78
|
+
26 27 28 29 30
|
79
|
+
2022年7月
|
80
|
+
日 月 火 水 木 金 土
|
81
|
+
1 2
|
82
|
+
3 4 5 6 7 8 9
|
83
|
+
10 11 12 13 14 15 16
|
84
|
+
17 18 19 20 21 22 23
|
85
|
+
24 25 26 27 28 29 30
|
86
|
+
31
|
87
|
+
2022年8月
|
88
|
+
日 月 火 水 木 金 土
|
89
|
+
1 2 3 4 5 6
|
90
|
+
7 8 9 10 11 12 13
|
91
|
+
14 15 16 17 18 19 20
|
92
|
+
21 22 23 24 25 26 27
|
93
|
+
28 29 30 31
|
94
|
+
2022年9月
|
95
|
+
日 月 火 水 木 金 土
|
96
|
+
1 2 3
|
97
|
+
4 5 6 7 8 9 10
|
98
|
+
11 12 13 14 15 16 17
|
99
|
+
18 19 20 21 22 23 24
|
100
|
+
25 26 27 28 29 30
|
101
|
+
2022年10月
|
102
|
+
日 月 火 水 木 金 土
|
103
|
+
1
|
104
|
+
2 3 4 5 6 7 8
|
105
|
+
9 10 11 12 13 14 15
|
106
|
+
16 17 18 19 20 21 22
|
107
|
+
23 24 25 26 27 28 29
|
108
|
+
30 31
|
109
|
+
2022年11月
|
110
|
+
日 月 火 水 木 金 土
|
111
|
+
1 2 3 4 5
|
112
|
+
6 7 8 9 10 11 12
|
113
|
+
13 14 15 16 17 18 19
|
114
|
+
20 21 22 23 24 25 26
|
115
|
+
27 28 29 30
|
116
|
+
2022年12月
|
117
|
+
日 月 火 水 木 金 土
|
118
|
+
1 2 3
|
119
|
+
4 5 6 7 8 9 10
|
120
|
+
11 12 13 14 15 16 17
|
121
|
+
18 19 20 21 22 23 24
|
122
|
+
25 26 27 28 29 30 31
|
123
|
+
```
|