2

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のブール値の独自の配列を設定したくないため、この方法を検討しています。

4

3 に答える 3

2

カレンダーはあなたが何日であるかを覚えていると思います。2012年は31日目+29= 2月29日でした。2011年は3月1日でした。次に、その月の実際の最大値(3月の場合)は31日です。

カレンダーAPIはひどいです。

ユースケースで実際の最大値を要求する前に、年と月を直接設定する必要があります。

于 2012-07-29T03:28:34.807 に答える
0

これは、2012年2月29日の1年前が2011年3月1日であるために発生しています。

于 2012-07-29T03:28:22.997 に答える
0

2011年2月には29日目はありません。クラスは、最初の有効な日付に合わせて自動的に調整されます。2月28日以降の初日である3月1日をウォルトしたと思われます。

于 2012-07-29T03:31:31.410 に答える