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

如何计算两个Date类型日期的年、月、日间隔差值?

计算两个日期的年、月、日间隔差值

核心思路

由于Date类已过时且存在设计缺陷,推荐使用Java 8及以上版本提供的java.timeAPI(JSR-310)来处理日期计算,步骤如下:

  1. 将字符串日期解析为LocalDate对象

    • 使用DateTimeFormatter指定输入日期的格式(此处为dd/MM/yyyy,即日/月/年)
    • LocalDate专门用于处理不含时间的日期,是线程安全且不可变的类
  2. 计算日期间隔

    • 通过Period.between()方法直接获取两个日期之间的年、月、日差值
    • 该方法会自动处理不同月份的天数差异(比如2月到3月的天数变化)
  3. 格式化输出中文结果

    • 提取Period中的年、月、日数值,拼接成指定格式的字符串

完整代码示例

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.Period;

public class DateDifference {
    public static void main(String[] args) {
        // 定义日期格式匹配输入字符串
        DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
        
        // 解析字符串为LocalDate
        LocalDate startDate = LocalDate.parse("24/05/2020", dateFormatter);
        LocalDate endDate = LocalDate.parse("21/09/2021", dateFormatter);
        
        // 计算日期间隔
        Period period = Period.between(startDate, endDate);
        
        // 生成中文格式结果
        String diffResult = String.format("%d年,%d个月,%d天",
                period.getYears(),
                period.getMonths(),
                period.getDays());
        
        System.out.println(diffResult); // 输出:1年,3个月,27天
    }
}

关键注意事项

  • 日期顺序:Period.between(start, end)要求start早于end,否则会返回负的差值。如果不确定日期顺序,可以先判断:
    if (startDate.isAfter(endDate)) {
        period = Period.between(endDate, startDate);
        // 可根据需求添加提示或调整结果表述
    }
    
  • 格式匹配:解析时的格式必须与输入字符串完全一致,否则会抛出DateTimeParseException
  • 时区处理:如果需要考虑时区,可使用ZonedDateTime替代LocalDate,再进行间隔计算

内容的提问来源于stack exchange,提问作者Gegham Virabyan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 22:01:18