Mar*_*szS 8 java time date jodatime
样品测试
@Test
public void should_be_equals(){
LocalDate now = new LocalDate(2015,01,29);
assertThat(now.plusMonths(1).plusMonths(1)).isEqualTo(now.plusMonths(2));
}
Run Code Online (Sandbox Code Playgroud)
奇怪的结果:
org.junit.ComparisonFailure:
Expected :2015-03-29
Actual :2015-03-28
Run Code Online (Sandbox Code Playgroud)
为何这有所不同?
stu*_*net 16
如果你要增加一个月2015/01/29,你会得到2015/02/29- 因为2015年不是闰年,那不是一个有效的日期,所以Joda选择2015/02/28,如记录:
添加可能会改变年份,但是日期通常不会改变.如果添加月份使日期无效,则会将其调整为该月份的最后一个有效日期.
而另外一个月的添加2015/02/28将导致实际日期2015/03/28.
添加两个月后,2月29日缺失的问题不会出现,因为Joda永远不会得到无效的日期.
同样的情形适用于,例如,new LocalDate(2015, 03, 31).plusMonths(2)对new LocalDate(2015, 03, 31).plusMonths(1).plusMonths(1)-我想,这是不是闰年更常见.