使用Calendar.DATE时Calendar.roll奇怪的结果

时间:2015-10-01 14:36:08

标签: java datetime calendar

今天,在欧洲,日期是2015年10月1日。您能否告诉我为什么运行此代码会将日期显示为2015年10月31日?

Calendar yesterday = Calendar.getInstance();
yesterday.roll(Calendar.DATE, false);
System.out.println(yesterday.getTime());

1 个答案:

答案 0 :(得分:6)

Calendar.DATE表示该月的某一天,而不是一年中的某一天。因此,当将一个月的日期向后滚动1个单位时,我们基本上是从该月的第1天到最后一天。

引用roll Javadoc(强调我的):

  

在给定时间字段上添加或减去(上/下)单个时间单位而不更改更大的字段

并引用Calendar Javadoc:

  

较大的字段代表较大的时间单位。

因此,滚动月中的日期时,此方法不会更改MONTH或YEAR等字段。

您应该使用Calendar.DAY_OF_YEAR代替:

run.py