我需要根据自己的任务处理日期。准确地说,我需要检查两个日期之间的月份差是否为整数。2个日期输入参数。结果-布尔值:true如果月份计数准确(无尾),false否则。例如:之间diff_months31.01.2018和28.02.2018应为1个月,这是可能的组合。30.01.2018和28.02.2018 : 1个月无尾,所以OK29.01.2018和28.02.2018 : 1个月无尾,所以OK28.01.2018和28.02.2018 : 1个月无尾,所以OK27.01.2018和28.02.2018 : 0个月让我们再参数:28.02.2018和28.03.2018 : 1个月无尾,所以OK28.02.2018和29.03.2018 : 1个月1天,所以失败28.02.2018和27.03.2018 : 0个月有尾巴,所以失败我发现java date api具有用于日期计算的特殊API,但从我的角度来看,它的工作原理是矛盾的:LocalDate.of(2018, 1, 31).until(LocalDate.of(2018, 2, 28), ChronoUnit.MONTHS); // 0
LocalDate.of(2018, 1, 31).plusMonths(1); // but 2018-02-28第二个结果是预期的,但第一-不是。看起来真的很奇怪。您能否建议两个日期之间的月份计算LocalDate#plusMonths方法与该方法一致?
2 回答
慕尼黑5688855
TA贡献1848条经验 获得超2个赞
用日历术语表示日期之间的差异是模棱两可的。在Period1月31日和2月28日之间可以“10月日”或“0个月28天内”消费。这两个答案都是正确的。
如果要实现确定两个日期是否plusMonths对齐的特定逻辑,则java.time为您提供了所有工具。首先,获取日期之间的月数,而不考虑该月中的哪几天,然后用于plusMonths测试:
boolean isExactMonths(LocalDate a, LocalDate b) {
long months = ChronoUnit.MONTHS.between(YearMonth.from(a), YearMonth.from(b));
return a.plusMonths(months).equals(b);
}
开心每一天1111
TA贡献1836条经验 获得超13个赞
乔达时间如预期般运作:
Months.monthsBetween(org.joda.time.LocalDate.parse("2018-1-31"),org.joda.time.LocalDate.parse("2018-2-28")).getMonths() //1
添加回答
举报
0/150
提交
取消