与LocalDate#plusMonths方法配合使用的计算两个日期之间的月数的方法?

我需要根据自己的任务处理日期。准确地说,我需要检查两个日期之间的月份差是否为整数。2个日期输入参数。结果-布尔值:true如果月份计数准确(无尾),false否则。
例如:

之间diff_months31.01.201828.02.2018应为1个月,这是可能的组合。
30.01.201828.02.2018  1个月无尾,所以OK
29.01.201828.02.2018  1个月无尾,所以OK
28.01.201828.02.2018  1个月无尾,所以OK
27.01.201828.02.2018  0个月

让我们再参数:
28.02.201828.03.2018  1个月无尾,所以OK
28.02.201829.03.2018  1个月1天,所以失败
28.02.201827.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方法与该方法一致?


Qyouu
浏览 509回答 2
2回答

慕尼黑5688855

用日历术语表示日期之间的差异是模棱两可的。在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

乔达时间如预期般运作:Months.monthsBetween(org.joda.time.LocalDate.parse("2018-1-31"),org.joda.time.LocalDate.parse("2018-2-28")).getMonths() //1
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java