当前位置: 代码网 > it编程>编程语言>Java > java8时间间隔类Duration和Period示例代码

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

2026年04月08日 Java 我要评论
在 java 的时间宇宙里,有两个专门用来“丈量时间间隔”的角色,它们像两种不同的尺子,一个量“钟表时间”,一个量“日期跨度”。

在 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内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com