请帮助我理解为什么下面的代码:
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 :(得分: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。