超过年份时,日历添加方法错误

Hov*_*els -4 java calendar date

我必须使用java.util.Calendar #add(...)方法错误,因为它给了我意想不到的结果.假设一些初始条件:

  • 我创建了一个Calendar对象并将其初始化为2012年1月30日.
  • 我尝试添加47周,从中提取日期并打印出结果.
  • 我尝试将48周添加到原始实例(或其克隆副本),并打印出结果.

我认为这两个结果之间会有7天的差异,但我得到7天+ 1年.

例如:

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

public class CalendarFun {
   public static void main(String[] args) {
      Calendar cal = Calendar.getInstance();

      cal.set(Calendar.MONTH, Calendar.JANUARY);
      cal.set(Calendar.DAY_OF_MONTH, 30);
      cal.set(Calendar.YEAR, 2012);

      Date date = cal.getTime();
      SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/YYYY");
      System.out.println(dateFormat .format(date));

      Calendar newCal = (Calendar) cal.clone();
      newCal.add(Calendar.WEEK_OF_YEAR, 47);
      System.out.println("add 47 weeks: " + dateFormat.format(newCal.getTime()));

      newCal = (Calendar) cal.clone();
      newCal.add(Calendar.WEEK_OF_YEAR, 48);
      System.out.println("add 48 weeks: " + dateFormat.format(newCal.getTime()));
   }
}
Run Code Online (Sandbox Code Playgroud)

打印出:

01/30/2012
add 47 weeks: 12/24/2012
add 48 weeks: 12/31/2013
Run Code Online (Sandbox Code Playgroud)

12/31/2013?我究竟做错了什么?

Kep*_*pil 7

除非我更改为YYYY,否则您的代码不会为我编译yyyy.之后它似乎工作正常.