zoukankan      html  css  js  c++  java
  • JDK 8 及其后续 JDK 中 Period 和 Duration

    我们都知道 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

  • 相关阅读:
    题目:返回一个整数数组中最大子数组的和。(要求程序必须能处理1000 个元素)
    四则运算三(接受用户输入答案,并判断对错。)
    二维数组
    结对开发(一位数组)
    测试四则运算
    四则运算2
    程序设计思路
    项目计划总结
    小学二年级题目的改进
    二年级题目的改进
  • 原文地址:https://www.cnblogs.com/huyuchengus/p/15217009.html
Copyright © 2011-2022 走看看