java8时间间隔类Duration和Period示例代码

 更新时间:2026年04月08日 10:11:05   作者:五阿哥永琪  
文章解释了Java中Duration和Period的区别,并提供了它们的特点、适用场景和常见用途,文中还提供了每个类的常用方法和示例,感兴趣的朋友一起看看吧

在 Java 的时间宇宙里,有两个专门用来“丈量时间间隔”的角色,它们像两种不同的尺子,一个量“钟表时间”,一个量“日期跨度”。主角就是:
👉 DurationPeriod
我带你拆开看,它们到底哪里不一样。

一、Duration(时间间隔:精确到秒/纳秒 ⏱️)

Duration 用来表示基于时间的间隔,适合描述“具体流逝了多少时间”。

✅ 特点

  • 基于 秒(seconds)和纳秒(nanoseconds)
  • 适合处理:
    • 时、分、秒
    • 精确时间计算
  • 常用于:
    • 接口超时
    • 任务耗时统计
    • 时间差计算

✅ 示例

Duration duration = Duration.between(startTime, endTime); 
long seconds = duration.getSeconds(); // 总秒数 
long millis = duration.toMillis(); // 转毫秒

二、Period(日期间隔:年/月/日 📅)

Period 用来表示基于日期的间隔,关注的是“日历上的跨度”。

✅ 特点

  • 基于 年、月、日
  • 不涉及具体时间(时分秒)
  • 常用于:
    • 年龄计算
    • 日期差(多少天/多少个月)
    • 账期、周期计算

✅ 示例

Period period = Period.between(startDate, endDate);
int years = period.getYears();
int months = period.getMonths();
int days = period.getDays();

三、核心区别

对比点DurationPeriod
类型时间间隔日期间隔
精度秒 / 纳秒年 / 月 / 日
是否包含时间✅ 包含(时分秒)❌ 不包含
适用对象LocalDateTime、InstantLocalDate
是否考虑月份长度❌ 不关心✅ 会考虑(28/30/31天)
常见用途耗时统计、超时控制年龄、日期差

四、举个直观例子 🌰

假设:

2024-01-01 00:00 → 2024-01-02 00:00

Duration

👉 得到:86400秒

Period

👉 得到:1天

再来一个更有意思的:

2024-01-31 → 2024-02-28

Period

👉 结果:0个月28天(因为2月没有31号)

Duration

👉 结果:秒数差(固定值)

五、常用方法

一、Duration常用方法(时间流逝型 ⏱️)

👉 适合:时 / 分 / 秒 / 纳秒

1️⃣ 创建对象

Duration.ofSeconds(60);
Duration.ofMinutes(10);
Duration.ofHours(2);
Duration.ofDays(1);
Duration.between(start, end);

2️⃣ 获取时间

duration.getSeconds();     // 总秒数  
duration.toMillis();       // 转毫秒  
duration.toMinutes();      // 转分钟  
duration.toHours();        // 转小时

3️⃣ 运算操作

duration.plusSeconds(30);  // 加30秒  
duration.minusMinutes(5);  // 减5分钟  
duration.multipliedBy(2);  // 乘2  
duration.dividedBy(2);     // 除2

4️⃣ 判断

duration.isNegative();     // 是否负数  
duration.isZero();         // 是否为0

5️⃣ 格式输出

duration.toString(); // PT10M(ISO-8601格式)

👉 像:PT2H30M(2小时30分钟)

二、Period常用方法(日历跨度型 📅)

👉 适合:年 / 月 / 日

1️⃣ 创建对象

Period.of(1, 2, 3);   // 1年2月3天  
Period.ofYears(2);  
Period.ofMonths(6);  
Period.ofDays(10);  
Period.between(startDate, endDate);

2️⃣ 获取时间

period.getYears();  
period.getMonths();  
period.getDays();

⚠️ 注意:不是总天数,而是“拆分后的年月日”

3️⃣ 运算操作

period.plusDays(5);  
period.minusMonths(2);  
period.multipliedBy(2);

4️⃣ 判断

period.isZero();  
period.isNegative();

5️⃣ 规范化(很关键🔥)

period.normalized();

👉 作用:把 15个月 → 1年3个月

6️⃣ 格式输出

period.toString(); // P1Y2M3D

到此这篇关于java8时间间隔类Duration和Period示例代码的文章就介绍到这了,更多相关java duration和period内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java垃圾回收之分代收集算法详解

    Java垃圾回收之分代收集算法详解

    今天小编就为大家分享一篇关于Java垃圾回收之分代收集算法详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-10-10
  • java中Date类和Strng类的灵活转化

    java中Date类和Strng类的灵活转化

    这篇文章主要介绍了java中Date类和Strng类的灵活转化,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • Java实现限流接口的示例详解

    Java实现限流接口的示例详解

    限流是对某一时间窗口内的请求数进行限制,保持系统的可用性和稳定性,防止因流量暴增而导致的系统运行缓慢或宕机,本文主要来和大家聊聊如何使用java实现限流接口,感兴趣的可以了解下
    2023-12-12
  • Java向Runnable线程传递参数方法实例解析

    Java向Runnable线程传递参数方法实例解析

    这篇文章主要介绍了Java向Runnable线程传递参数方法实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • java实现潜艇大战游戏源码

    java实现潜艇大战游戏源码

    潜艇大战游戏相信大家都玩过,是一款非常有趣的小游戏,那么基于代码是如何实现的呢?今天小编给大家带来一篇教程帮助大家学习java实现潜艇大战游戏,感谢的朋友一起看看吧
    2021-06-06
  • Java设计模式之适配器模式(Adapter模式)介绍

    Java设计模式之适配器模式(Adapter模式)介绍

    这篇文章主要介绍了Java设计模式之适配器模式(Adapter模式)介绍,本文讲解了为何使用适配器模式、如何使用适配器模式等内容,需要的朋友可以参考下
    2015-03-03
  • 快速解决Java项目在复杂网络环境下访问外网不通的问题

    快速解决Java项目在复杂网络环境下访问外网不通的问题

    这篇文章主要介绍了快速解决Java项目在复杂网络环境下访问外网不通的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2025-10-10
  • mybatis中一对一、一对多的<association> 配置使用

    mybatis中一对一、一对多的<association> 配置使用

    <association> 是 MyBatis 中处理一对一或一对多关系的映射元素,用于处理一对一和一对多关系的映射,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-05-05
  • Spring Boot 验证码的生成和验证详解

    Spring Boot 验证码的生成和验证详解

    我们在做用户登录的时候,为了安全性考虑,会增加验证码的功能,下面这篇文章主要给大家介绍了关于Spring Boot中验证码的生成和验证的相关资料,文中给出了详细的示例代码供大家参考学习,需要的朋友们下面来一起看看吧。
    2017-06-06
  • hadoop上传文件功能实例代码

    hadoop上传文件功能实例代码

    这篇文章主要介绍了hadoop上传文件功能实例代码,需要的朋友可以参考下
    2017-09-09

最新评论