问题描述
跨月使用java.time.Period.between()
时,为什么下面的代码会根据操作方向报告不同的结果?
import java.time.LocalDate;
import java.time.Period;
class Main {
public static void main(String[] args) {
LocalDate d1 = LocalDate.of(2019,1,30);
LocalDate d2 = LocalDate.of(2019,3,29);
Period period = Period.between(d1,d2);
System.out.println("diff: " + period.toString());
// => P1M29D
Period period2 = Period.between(d2,d1);
System.out.println("diff: " + period2.toString());
// => P-1M-30D
}
}
现场代表:https://repl.it/@JustinGrant/BigScornfulQueryplan#Main.java
这是我期望它起作用的方式:
2019-01-30 => 2019-03-29
- 将一个月添加到2019-01-30 => 2019-02-30,限于2019-02-28
- 增加29天即可到达2019-03-29
这与Java的结果相符:P1M29D
(反向)2019-03-29 => 2019-01-30
- 从2019-03-29减去一个月=> 2019-02-29,限于2019-02-28
- 减去29天即可到达2019-01-30
但是Java在这里返回P-1M-30D
。我期望P-1M-29D
。
通过删除完整的月份,然后计算剩余天数,并进行调整以确保两者具有相同的符号,来计算周期。然后根据12个月的年数将月份数分为年份和月份。如果月的结束日期大于或等于月的开始日期,则考虑一个月。例如,从
2010-01-15
到2011-03-18
是一年零两个月零三天。
也许我没有足够仔细地阅读本文,但是我认为本文无法完全解释我所看到的不同行为。
我对java.time.Period.between
应该如何工作有什么误解?具体来说,当“ 删除完整月份”的中间结果是无效日期时,将会发生什么?
算法在其他地方有更详细的记录吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)