Javaのカレンダーバグ設定した日付が30/12または12分の31であります

ミングエン:

私はクラスを使用しCalendar作成しますDate> 2018年12月29日が、2018年12月30日-私は日付が12分の31または30/12で設定私のテストケースでは、私の日付の年は私のセット+ 1例2018年12月29日の日付の年です- > 2019年12月30日。私はなぜか分からないのですか?私のコード:

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class MyClass {
    public static void main(String args[]) {
        calendarBug(2018, 11, 29);
        calendarBug(2018, 11, 30);
    }

    public static void calendarBug(int year, int month, int day) {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.YEAR, year);
        calendar.set(Calendar.MONTH, month);
        calendar.set(Calendar.DAY_OF_MONTH, day);
        Date date = calendar.getTime();
        System.out.println(new SimpleDateFormat("YYYY-MM-dd").format(date));
    }
}

出力:

2018-12-29
2019-12-30
ブラックコーヒー:

YYYY用表し週年使用yyyy代わりに。

Javadocから:

週年度はWEEK_OF_YEARサイクルと同期しています。最初と最後の週(包括的)の間のすべての週は、同じ週の年の値を持っています。そのため、週一年の最初と最後の日は別の暦年値を有することができます。

例えば、1998年1月1日は木曜日です。getFirstDayOfWeek()は月曜日とgetMinimalDaysInFirstWeek(ある)4(ISO 8601標準互換設定)である場合には、1月4日、1998年に1998の1997年12月29日に開始し、終了の週1週年は、最後の3日間1998です暦年1997年の場合の、しかし、getFirstDayOfWeek()は1998年1月10日1998年1998年1月4日に開始し、終了の後、週1日曜日、です。1998年の最初の3日間は、1997年の週53の一部であり、その週の年は1997年です。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=222833&siteId=1