Javaには末尾の取得関数がないと思っていたら、あった。getActualMaximum()がそれらしい。試しに下記のようにしてみると、1つ問題が。
Calendar c = GregorianCalendar.getInstance(); int date = c.getActualMaximum(Calendar.DATE); System.out.println(date); (出力結果) 30 c.set(Calendar.MONTH,Calendar.FEBRUARY);//2月にしてみる int date = c.getActualMaximum(Calendar.DATE);//末尾を取得 System.out.println(c.getTime());//日付を出力 System.out.println(date);//末尾を出力 (出力結果) Wed Mar 01 17:00:22 JST 2006 31
あれ?2月にならないぞ。・・・とあせってみたものの、原因が判明。今日が6月29日だから2月29日=3月1日と判定されてるのね。それにも対応すると、
Calendar c = GregorianCalendar.getInstance(); c.set(Calendar.MONTH,Calendar.FEBRUARY);//2月にする c.set(Calendar.DATE,1);//1日にする int date = c.getActualMaximum(Calendar.DATE);//末尾を取得 System.out.println(c.getTime());//日付を出力 System.out.println(date);//末尾を出力 (出力結果) Wed Feb 01 17:05:17 JST 2006 28
なんか不便だ。共通クラス作ろう。でもcommonsとかにすでにあるんだろうな。