如何解决没有从两个日期获得有效的月份数
需要使用 java 8 确定两个日期之间的月数,但没有获得正确的月数。请找到以下程序
public static void main(String[] args) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy",Locale.ENGLISH);
YearMonth startDate = YearMonth.parse("12/31/2020",formatter);
YearMonth endDate = YearMonth.parse("12/01/2021",formatter);
System.out.println(startDate.plusYears(1) + " :: " + endDate + " :: " + startDate.plusYears(1).isBefore(endDate));
long monthsBetween = ChronoUnit.MONTHS.between(startDate,endDate);
System.out.println(monthsBetween);
}
输出::
2021-12 :: 2021-12 :: false
12
所以从上面的程序中,我们在这两个日期之间有 12 个月的时间"12/31/2020" and "12/01/2021"
但实际上上述日期之间没有几个月是 13,那么我们如何得到 12 而不是 13?
可能是我错了,但有人可以解释一下
注意:date format is MM/dd/yyyy
解决方法
您获得 12 个月的原因是因为 'To' 月份被排除在计数之外。 这里是 between 方法的实现,
//-----------------------------------------------------------------------
@Override
public long between(Temporal temporal1Inclusive,Temporal temporal2Exclusive) {
return temporal1Inclusive.until(temporal2Exclusive,this);
}
,
pratap 的回答完全正确。来自 between()
的文档:
计算返回一个整数,代表的个数 两个时间之间的完整单位。例如,金额在 时间 11:30 和 13:29 之间的时间将仅为一小时 一分钟不到两小时。
另一种说法是,计算中不包括结束月份。这反过来意味着解决方案是在结束月份增加一个月:
long monthsBetween = ChronoUnit.MONTHS.between(startDate,endDate.plusMonths(1));
现在输出就是你想要的:
13
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。