Jodatime Period 为 2 个不同的开始日期和相同的结束日期生成相同的输出
Jodatime Period produces same output for 2 different start dates and same end date
请帮我理解为什么下面的代码:
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
问题:
"Please help me understand why does the code ..."
答案:
只需 将 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.
请帮我理解为什么下面的代码:
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
问题:
"Please help me understand why does the code ..."
答案:
只需 将 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.