Jodatime Period为2个不同的开始日期和相同的结束日期生成相同的输出

时间:2016-03-15 17:38:41

标签: jodatime

请帮助我理解为什么下面的代码:

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

1 个答案:

答案 0 :(得分: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

相关问题