【发布时间】:2017-01-30 11:27:39
【问题描述】:
以下2个案例(2016年2月28日至2017年3月1日)的Period结果相同。
您能帮忙解释一下这种奇怪的行为吗?
案例 1:2016 年 2 月 28 日至 2017 年 3 月 1 日
Calendar start1 = Calendar.getInstance();
start1.set(2016, Calendar.FEBRUARY, 28, 0, 0, 0);
Calendar end1 = Calendar.getInstance();
end1.set(2017, Calendar.MARCH, 1, 0, 0, 0);
Interval i1 = new Interval(new DateTime(start1.getTime()), new DateTime(end1.getTime()))
System.out.println(i1.toPeriod());
结果:P1Y1D
案例 2:2016 年 2 月 29 日至 2017 年 3 月 1 日
Calendar start2 = Calendar.getInstance();
start2.set(2016, Calendar.FEBRUARY, 29, 0, 0, 0);
Calendar end2 = Calendar.getInstance();
end2.set(2017, Calendar.MARCH, 1, 0, 0, 0);
Interval i2 = new Interval(new DateTime(start2.getTime()), new DateTime(end2.getTime()))
System.out.println(i2.toPeriod());
结果:P1Y1D
【问题讨论】:
-
2016-02-28加上 1 年是什么?2017-02-28。 --- 什么是2016-02-29加上 1 年?2017-02-28。 --- 相同的答案,所以:2017-02-28加上 1 天是什么?2017-03-01。 --- 参见DateTime.plus(ReadablePeriod period)的javadoc。