Joda DateTime没有给出预期的结果

Kan*_*j M 0 java jodatime

鉴于DateTime2011年3月31日的对象和此代码:

DateTime temp1 = new DateTime(2011, 3, 31, 12, 0, 0, 0);
DateTime temp2 = temp1.plusMonths(1);
DateTime temp3 = temp2.plusMonths(1);
Run Code Online (Sandbox Code Playgroud)

执行后

temp1 = 2011-03-31T12:00:00.000+02:00
temp2 = 2011-04-30T12:00:00.000+02:00
temp3 = 2011-05-30T12:00:00.000+02:00
Run Code Online (Sandbox Code Playgroud)

temp3在这里错了.

这是正确的吗?我做错了吗?

Jon*_*eet 5

不,这里没有错.您将两次添加一个月,这意味着您第二次获得添加一个月的结果可能会截断添加第一个月的结果.

四月只有30天,这就是为什么你要到4月30日temp2- 并在4月30日增加一个月到5月30日.

如果你想要5月31日,请使用:

DateTime temp3 = temp1.plusMonths(2);
Run Code Online (Sandbox Code Playgroud)

基本上,如果您尝试根据关联性等考虑它,日期和时间算术会给出"奇数"结果.