开发工具分享
  • 首页
  • 计算科学
  • 文化旅游
  • 项目和网站
    • OSSEZ 计算技术
    • USRealEstate 社区
    • 地区文化
    • CWIKI.US
    • BUG.OSSEZ.COM
    • RSS.OSSEZ.COM
CWIKIUS.CN
一个有独立思考和温度的清新站
  1. Home
  2. Computer Science
  3. This article

JDK 8 及其后续 JDK 中 Period 和 Duration

2021年09月01日 753Browse 0Like 0Comments

我们都知道 JDK 8 以后开始使用了新的 joda 日期处理 API。

在这个 API 中,新增了 Period 和 Duration 这 2 个类,用于计算 2 个日期之间的间隔。

jdk-period-01

下面对这 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 的折磨了。

 

https://www.ossez.com/t/jdk-8-jdk-period-duration/13709

Tags: None
Last updated:2021年09月01日

HoneyMoose

有温度的人文和独立的思考

Like
< Previous
Next >

Comments

Cancel reply

Archives
  • May 2026
  • April 2026
  • March 2026
  • February 2026
  • January 2026
  • December 2025
  • November 2025
  • October 2025
  • September 2025
  • August 2025
  • July 2025
  • June 2025
  • May 2025
  • April 2025
  • March 2025
  • February 2025
  • January 2025
  • December 2024
  • November 2024
  • October 2024
  • September 2024
  • August 2024
  • July 2024
  • June 2024
  • May 2024
  • April 2024
  • March 2024
  • February 2024
  • January 2024
  • December 2023
  • November 2023
  • October 2023
  • September 2023
  • August 2023
  • July 2023
  • June 2023
  • May 2023
  • April 2023
  • December 2022
  • November 2022
  • October 2022
  • September 2022
  • August 2022
  • May 2022
  • April 2022
  • March 2022
  • February 2022
  • January 2022
  • December 2021
  • November 2021
  • October 2021
  • September 2021
  • August 2021
  • July 2021
  • June 2021
  • May 2021
  • April 2021
  • March 2021
  • February 2021
  • January 2021
  • December 2020
  • November 2020
  • October 2020
  • September 2020
  • August 2020
  • July 2020
  • June 2020
  • May 2020
  • April 2020
  • March 2020
  • February 2020
  • January 2020
  • December 2019
  • November 2019
  • October 2019
  • September 2019
  • August 2019
  • July 2019
  • June 2019
  • May 2019
  • April 2019
  • March 2019
  • February 2019
  • January 2019
  • December 2018
  • November 2018
  • October 2018
  • September 2018
  • August 2018
  • July 2018
  • June 2018
  • May 2018
  • April 2018
  • March 2018
Categories
  • Computer Science (2,362)
    • Confluence (663)
    • Gradle (12)
  • U.S. (482)
  • 文化旅游 (145)

COPYRIGHT © 2020 CWIKIUS. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS

湘ICP备2020018253号-1