Java中计算两个日期的日历天数问题及代码疑问
Java中计算两个日期的包含日历天数
首先明确:你预期的是包含首尾日期的总天数(比如2023-06-01到2023-06-02算2天),但ChronoUnit.DAYS.between方法返回的是两个日期之间的间隔天数(结束日期减去开始日期的差值),所以会得到1天,这是方法的设计逻辑,并非你的理解错误。
要得到包含首尾的日历天数,只需在间隔天数基础上加1即可,以下是修正后的代码:
LocalDateTime startLdt = LocalDateTime.parse("2023-06-01T00:00"); LocalDateTime endLdt = LocalDateTime.parse("2023-06-02T23:59"); LocalDate startdt = LocalDate.parse("2023-06-01"); LocalDate enddt = LocalDate.parse("2023-06-02"); // 计算包含首尾的天数:间隔天数 + 1 long diffInDays = ChronoUnit.DAYS.between(startLdt, endLdt) + 1; long noOfDaysBetween = ChronoUnit.DAYS.between(startdt, enddt) + 1; System.out.println(diffInDays); // 输出2 System.out.println(noOfDaysBetween); // 输出2
补充说明
- 这种加1的方式适用于所有需要统计"首尾都算"的场景:
- 单个日期(如2023-06-01到2023-06-01):间隔0天,加1后得到1天,符合单个日期的计数逻辑
- 跨多日(如2023-06-01到2023-06-03):间隔2天,加1后得到3天,包含1、2、3日
- 优先使用
LocalDate计算会更简洁,因为它本身不包含时分秒,能避免时间部分的干扰。
内容的提问来源于stack exchange,提问作者JAVA_CAT
相关产品推荐
相关产品推荐

