2016-03-15 65 views
0

请帮助我了解为什么下面的代码:Jodatime期产生2开始日期不同,相同的输出和相同的结束日期

import org.joda.time.DateTime; 
import org.joda.time.Period; 
import org.joda.time.PeriodType; 
import org.joda.time.format.PeriodFormat; 

public class TimeTestFail { 

    public static void main(String[] args) { 
     DateTime jdEnd = new DateTime(2014, 5, 1, 0, 0); 

     DateTime jdStart1 = new DateTime(2013, 5, 31, 0, 0); 

     Period pmd = new Period(jdStart1, jdEnd, PeriodType.yearMonthDayTime()); 

     // prints "period for jdStart1 = 11 months and 1 day" 
     System.out.println("period for jdStart1 = " + pmd.toString(PeriodFormat.getDefault())); 

     DateTime jdStart2 = new DateTime(2013, 5, 30, 0, 0); 
     Period pmd2 = new Period(jdStart2, jdEnd, PeriodType.yearMonthDayTime()); 


     // prints "period for jdStart2 = 11 months and 1 day" (same thing as for the other date!) 
     System.out.println("period for jdStart2 = " + pmd2.toString(PeriodFormat.getDefault())); 

    } 

} 

产生同期产量(11个月零1天)。正如你可以看到我的计算周期的两倍:

2013-05-31 ----- 2014-05-01 

2013-05-30 ----- 2014-05-01 

在它产生的11个月1天这两种情况下,这是完整的输出

period for jdStart1 = 11 months and 1 day 
period for jdStart2 = 11 months and 1 day 

我正在使用jodatime 2.9.2

回答

0

问题:

“请帮助我了解为什么代码...”

答:

只需添加11个月后来有一天(以这个顺序)的开始日期,和你会观察到相同的结束日期。

案例a:在2013-05-30添加了11个月之后,您的日期是2014-04-30。然后再增加一天,得到2014-05-01。

案例b:在2013-05-31添加了11个月之后,您的虚拟日期2014-04-31不存在,并且将缩短到最后有效日期2014-04-30。然后再增加一天就会产生2014-05-01。如何添加月份的行为是documented

相关问题