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

时间:2018-06-22 16:29:06

标签: java date java-8 jodatime localdate

我需要根据自己的任务处理日期。准确地说,我需要检查我们是否有两个整数之间的月份差。 2个日期输入参数。结果-布尔值:3 3 3 4 3 2 4 1 4 5 2 2 5 1 3 6 2 1 7 1 1,如果月份计数准确(无尾),则 makeup <- function(n, k){ # your suggested solution # } ,否则。
例如:

truefalse之间的

diff_months应该是1个月,并且可以组合。
31.01.201828.02.2018 1个月没有尾巴,所以确定
30.01.201828.02.2018 1个月没有尾巴,所以确定
29.01.201828.02.2018 1个月没有尾巴,所以确定
28.01.201828.02.2018 0个月

让另一个参数:
27.01.201828.02.2018 1个月没有尾巴,所以确定
28.02.201828.03.2018 :1个月+1天,因此失败
28.02.201829.03.2018 0个月有尾巴,因此失败

我发现java date api具有用于日期计算的特殊API,但从我的角度来看,它的工作原理是矛盾的:

28.02.2018

第二个结果是预期的,但第一个-不是。看起来真的很奇怪。

您能建议两个日期之间的月份计数方法与27.03.2018方法配合使用吗?

2 个答案:

答案 0 :(得分:1)

用日历术语表示日期之间的差异是模棱两可的。 1月31日至2月28日之间的Period可以是“ 1个月0天”或“ 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);
}

答案 1 :(得分:0)

Joda时间按预期工作:

Months.monthsBetween(org.joda.time.LocalDate.parse("2018-1-31"),org.joda.time.LocalDate.parse("2018-2-28")).getMonths() //1