我需要根据自己的任务处理日期。准确地说,我需要检查我们是否有两个整数之间的月份差。 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 #
}
,否则。
例如:
true
和false
之间的 diff_months应该是1个月,并且可以组合。
31.01.2018
和28.02.2018
: 1个月没有尾巴,所以确定
30.01.2018
和28.02.2018
: 1个月没有尾巴,所以确定
29.01.2018
和28.02.2018
: 1个月没有尾巴,所以确定
28.01.2018
和28.02.2018
: 0个月
让另一个参数:
27.01.2018
和28.02.2018
: 1个月没有尾巴,所以确定
28.02.2018
和28.03.2018
::1个月+1天,因此失败
28.02.2018
和29.03.2018
: 0个月有尾巴,因此失败
我发现java date api具有用于日期计算的特殊API,但从我的角度来看,它的工作原理是矛盾的:
28.02.2018
第二个结果是预期的,但第一个-不是。看起来真的很奇怪。
您能建议两个日期之间的月份计数方法与27.03.2018
方法配合使用吗?
答案 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