カレンダー表を作成する
日付選択ダイアログやブログの目次などを作成するために、
月のカレンダー表が必要になる機会は多いと思います。
ここでは、カレンダー表を作るプログラムをご紹介します。
日付計算用のjava.util.Calendarという便利な
クラスがありますので、月末や曜日を求めるといったことは
このクラスを応用すれば比較的簡単に実行できます。
あとは、日曜〜土曜の7列の表に日付を並べていきます。
下記のプログラムのtoStringメソッドを変更すれば、
たとえば日付部分にリンクが付いたHTMLテーブルなども
作成できるでしょう。
samples/datetime/MonthlyCalendar.java - Eclipse SDK
|
package samples.datetime;
import java.util.Calendar;
public class MonthlyCalendar {
private int year;
private int month;
private int[][] calendarMatrix = new int[6][7];
private int startDay;
private int lastDate;
/**
* カレンダー表オブジェクトを作成します。
* @param year 西暦年(..., 2005, 2006, 2007, ...)
* @param month 月(1, 2, 3, ..., 10, 11, 12)
*/
public MonthlyCalendar(int year, int month) {
this.year = year;
this.month = month;
calcFields();
}
private void calcFields() {
Calendar calendar = Calendar.getInstance();
calendar.clear();
// 月の初めの曜日を求めます。
calendar.set(year, month - 1, 1); // 引数: 1月: 0, 2月: 1, ...
startDay = calendar.get(Calendar.DAY_OF_WEEK);
// 月末の日付を求めます。
calendar.add(Calendar.MONTH, 1);
calendar.add(Calendar.DATE, -1);
lastDate = calendar.get(Calendar.DATE);
// カレンダー表を作成します。
int row = 0;
int column = startDay - 1; // startDay: 日曜日 = 1, 月曜日 = 2, ...
for (int date = 1; date <= lastDate; date++) {
calendarMatrix[row][column] = date;
if (column == 6) {
row++;
column = 0;
} else {
column++;
}
}
}
@Override
public String toString() {
StringBuffer sb = new StringBuffer();
loop: for (int i = 0; i < calendarMatrix.length; i++) {
for (int j = 0; j < calendarMatrix[i].length; j++) {
int day = calendarMatrix[i][j];
if (day == 0) {
if (i != 0) {
// カレンダー表内の月末以降のセルに到達
break loop;
}
sb.append(" ");
} else if (day < 10) {
sb.append(" ").append(day);
} else {
sb.append(" ").append(day);
}
}
sb.append("\r\n");
}
return sb.toString();
}
public static void main(String[] args) {
int currentYear = Calendar.getInstance().get(Calendar.YEAR);
for (int month = 1; month <= 12; month++) {
System.out.println(currentYear + "年" + month + "月");
System.out.println(new MonthlyCalendar(currentYear, month));
}
}
}
|
|
このサンプルでは、現在年の1年分のカレンダーを出力しています。
実行結果は以下のようになります。
コマンド プロンプト
|
C:\JavaMaster\bin>java -cp . samples.datetime.MonthlyCalendar
2005年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
2005年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
2005年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
2005年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
2005年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
2005年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
2005年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
2005年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
2005年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
2005年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
2005年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
2005年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
|
|