You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 08:07:42