java中计算两个日期间隔推荐使用java.time.period类,通过period.between()计算localdate差值,自动处理闰年和月份天数差异,返回含年月日的period对象,支持手动构建、链式操作及与localdate加减配合。

Java 中计算两个日期之间的间隔(如年、月、日),推荐使用 java.time.Period 类,它专为“日期单位差”设计,适用于 LocalDate、LocalDateTime(仅取日期部分)等不带时区的日期类型。
用 Period.between() 直接计算 LocalDate 间隔
Period.between() 是最常用、最直观的方式,参数必须是两个 LocalDate。它自动处理月份天数差异、闰年等细节,返回一个包含年、月、日三部分的 Period 对象。
- 结果可能含负值:如果起始日期晚于结束日期,年/月/日均为负数
- 不考虑时间部分:传入
LocalDateTime会编译报错,需先调用.toLocalDate() - 示例:
LocalDate start = LocalDate.of(2022, 5, 15); LocalDate end = LocalDate.of(2024, 8, 20); Period period = Period.between(start, end); System.out.println(period); // P2Y3M5D(2年3个月5天)
手动构建或调整 Period
除了自动计算,也可用静态工厂方法创建自定义间隔,常用于加减日期或测试场景:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
-
Period.ofYears(2)、Period.ofMonths(6)、Period.ofDays(10) -
Period.of(1, 3, 15)表示 1年3个月15天 - 支持链式操作:
Period.ofMonths(5).plusDays(3)
注意:Period ≠ Duration
Period 用于日期单位(年月日),Duration 用于精确时间量(秒、纳秒)。不要混用:
- 想算“两个 LocalDateTime 相差多少小时/分钟?” → 用
Duration.between() - 想算“2023-01-10 到 2024-03-25 是几年几个月几天?” → 用
Period.between() -
Period无法表示小时以下单位;Duration不理解“1个月=多少秒”(因月份天数不固定)
结合 LocalDate 使用:加减日期
Period 常与 LocalDate.plus() 或 minus() 配合,实现语义清晰的日期运算:
localDate.plus(Period.ofYears(1).plusMonths(2))-
localDate.minus(Period.parse("P1Y6M"))(支持 ISO-8601 字符串解析) - 结果始终是有效日期(例如 1月31日加1个月 → 自动转为2月28日或29日)
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










