问题是您要从2013年1月30日开始使用日历。
然后,您将年份设置为2013年-这不是问题。
然后,您将月份设置为1(即2月)。您希望在这里发生什么?实际发生的情况是,它会记住需要将月份设置为1,而 不是
重新计算实际时间值。根据文档(Emphsis我的),
将
在您调用to时重新计算时间值:
get
set(f,value)将日历字段f更改为value。另外,它设置一个内部成员变量以指示日历字段f已更改。尽管日历字段f立即更改,但是直到下一次调用get(),getTime(),getTimeInMillis(),add()或roll()时,才重新计算日历的时间值(以毫秒为单位)。因此,对set()的多次调用不会触发多个不必要的计算。作为使用set()更改日历字段的结果,其他日历字段也可能会更改,具体取决于日历字段,日历字段值和日历系统。
此外,在重新计算日历字段之后,get(f)不一定会返回通过调用set方法设置的值。 具体情况由具体的日历类确定。
当您尝试将“ 1月30日”更改为“ 2月30日”并强制进行计算时, 实际 发生的情况是您将在3月2日结束我的工作,但是在实现上可能会有所不同。
最好的解决方法是:
- 使用
Calendar.set(year, month, date)
代替来避免此订购问题 - 首先,将Joda Time用作更明智的API。



