设置日期为30/12或31/12的Java日历错误

时间:2019-03-11 07:50:57

标签: java date java-date

我使用类Calendar创建Date。但是在我的测试案例中,当我将日期设置为31/12或30/12时,日期的年份是我设置的日期年份+ 1.示例2018-12-29-> 2018-12-29但2018-12-30 -> 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

1 个答案:

答案 0 :(得分:7)

authors代表一周的年。请改用book

来自javadocs:

  

一周的一年与WEEK_OF_YEAR周期保持同步。之间的所有星期   前一周和后一周(含)具有相同的周年值。   因此,一周的第一天和最后一天可能会有所不同   日历年的值。

     

例如,1998年1月1日是星期四。如果getFirstDayOfWeek()为   MONDAY和getMinimalDaysInFirstWeek()为4(ISO 8601标准   兼容设置),那么1998年的第1周从1997年12月29日开始,   并于1998年1月4日结束。最后三个星期是1998年   1997日历年的天。但是,如果getFirstDayOfWeek()为   1998年第1周的星期日开始于1998年1月4日,结束于   1998年1月10日; 1998年的前三天为一周的一部分   1997年第53号,一周是1997年。