微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

没有从两个日期获得有效的月份数

如何解决没有从两个日期获得有效的月份数

需要使用 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 举报,一经查实,本站将立刻删除。