JDK 8 及其后续 JDK 中 Period 和 Duration
我们都知道 JDK 8 以后开始使用了新的 joda 日期处理 API。
在这个 API 中,新增了 Period 和 Duration 这 2 个类,用于计算 2 个日期之间的间隔。
下面对这 2 个类进行一些比较和说明,从使用上来说,如果你不需要秒或者纳秒一级的比较的话,就用 Period ,Period 的比较粒度更粗,通常只能精确到,天(Days),月(Months)和 年(Years)。
Duration 是按照纳秒级别的比较,通常会非常精确,不会丢精度,Period 有可能会丢精度。
线程安全和可变
这 2 个类都是:
- 线程安全(thread-safe)
- 不可变(immutable)
对比和区别
2 个类比较的精度不不同。
Period 包含年数,月数,天数,而 Duration 只包含秒,纳秒。
Period 只能返回年数,月数,天数;Duration可以返回天数,小时数,分钟数,毫秒数等。
2 个类可以使用的类型不同。
Period 只能使用 LocalDate,换句话说 Period 只能使用 Date 对象。
Duration 是可以使用 Instant 对象的。
例如下面的代码:
Instant t1, t2;
...
long ns = Duration.between(t1, t2).toNanos();
将会计算 2 个时间之间的纳秒的不同。
考察下面计算生日的代码:
Period p = Period.between(birthday, today);
long p2 = ChronoUnit.DAYS.between(birthday, today);
System.out.println("You are " + p.getYears() + " years, " + p.getMonths() +
" months, and " + p.getDays() +
" days old. (" + p2 + " days total)");
代码将会输出为:
You are 41 years, 8 months, and 0 days old. (15219 days total)
因为我们在生日和日期的计算的时候,并不需要非常高的精度,因此上面的代码是不是非常方便?
再也不用受到老的 Java 日期 API 的折磨了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)