Java を使ってEclipseのコンソールにカレンダーを表示させてみた。


あくまでメモ用として。
・cal.set(int year,int month-1,1)するときに月が「0から11」⇒「1月から12月」にセットされることを忘れがちだった。
・cal.getActualMaximum(Calendar.DATE)でxxxx年xx月は何日あるのかを知ることができる。
・曜日と日付は配列を使って格納した。

・カレンダーを作って出力するクラス
 
package foo;
import java.util.Calendar;
public class Calmaker {

public void Makecal(int year,int month){
Calendar cal = Calendar.getInstance();
//int weekday = cal.get(Calendar.DAY_OF_WEEK);
//System.out.println(weekday);

int days[][] = new int[6][7];

System.out.println("日 月 火 水 木 金 土");
int row = 0;

//一日から最終日までループ
for (int i = 1; i <= cal.getActualMaximum(Calendar.DATE); i++) {
    //日付けをオブジェクトに設定
    cal.clear();
    cal.set(year, month-1, i); //月は0から11で指定されているので、-1してあげる。
    int weekday = cal.get(Calendar.DAY_OF_WEEK);

    //日付を拡張
    days[row][weekday-1] = i ;
    //System.out.println(days[row][weekday-1]);

    if(weekday % 7 ==0) {
        row ++;
    }
}

//出力
    for (int k = 0; k < 6; k++) {
        for (int j = 0; j < 7; j++) {

            String res = String.valueOf(days[k][j]);

            if(days[k][j]==0) {
                System.out.print("   ");
            }else if(days[k][j] < 10) {
                    System.out.print(" " + res + " ");

            }else if(days[k][j] >= 10) {
                res = res+" ";
                System.out.print(res);
            }
            if(j == 6) {
                System.out.println("\r\n");
            }
        }
    }
}

}
・メインクラス

package foo;

import java.util.Scanner;

public class Makecal {

public static void main(String[] args) {
    // TODO 自動生成されたメソッド・スタブ
    System.out.println("西暦を4桁で入力してください");
    Scanner sc1 = new Scanner(System.in);
    System.out.println("月を1から12で入力してください");
    Scanner sc2 = new Scanner(System.in);

    int year  = sc1.nextInt();
    int month = sc2.nextInt();
    System.out.println("西暦"+year+"年" + month +"月");
    System.out.println("");

    Calmaker clm = new Calmaker();
    clm.Makecal(year,month);
}

}

終わり。