java.util.Calendarメソッドを試して、getActualMaximum()
その年の1か月の最大日数を取得できるかどうかを確認していました。これが私のコードです:
public static void main(String[] args) {
Calendar c = Calendar.getInstance(); // today is July 29, 2012
System.out.println(c.get(Calendar.MONTH) + " " + c.getActualMaximum(Calendar.DATE) + " " + c.get(Calendar.YEAR));
c.set(Calendar.MONTH, Calendar.FEBRUARY); // set to February 2012
System.out.println(c.get(Calendar.MONTH) + " " + c.getActualMaximum(Calendar.DATE) + " " + c.get(Calendar.YEAR));
c.set(Calendar.YEAR, 2011); // set year to 2011, now February 2011
System.out.println(c.get(Calendar.MONTH) + " " + c.getActualMaximum(Calendar.DATE) + " " + c.get(Calendar.YEAR));
}
私が期待している出力は次のとおりです。
6 31 2012 // last day of July 2012 is 31
1 29 2012 // last day of Feb 2012 is 29
1 28 2011 // last day of Feb 2011 is 28
しかし、これは私が得ているものです:
6 31 2012
1 29 2012
2 31 2011 // HUH?
(java.util.Calendarでは、1月から12月の月の値は0から11で始まり、月の日自体は1で始まります。)
月が突然Calendar.MARCHに設定されたのはなぜですか?ここで何が起こっているのでしょうか。また、特定の月と年の最後の日を正しく取得するにはどうすればよいですか。31日の月を表すインデックスの場合はtrue、そうでない場合はfalseのブール値の独自の配列を設定したくないため、この方法を検討しています。