最近发现spring boot中的有些配置使用了 Duration ,于是详细的看了 Duration 这个类

Duration 是在 Java 8中加入的,主要是用来计算日期,差值之类的。

Duration 被声明final(immutable),并且线程安全。

先看下 Duration 的实例化方式,由于构造器被私有了,对外只提供了一个 ZERO 实例,主要是使用静态工厂方法来进行实例化

自定义初始化方式,这种方式主要是以一系列of…()方法为主,可以自定义时分秒。
of(long amount, TemporalUnit unit) 在 ZERO 的基础上加上一定时间,第一个参数指定数量,第二个指定单位,单位可使用 ChronoUnit (实现了 TemporalUnit )
from(TemporalAmount amount) 通过TemporalAmount获取一个Duration实例,也是在 ZERO 的基础上增加

  • 转换字符串方式,类似于 SimpleDateFormat 的格式化日期方式
    Duration 字符串类似数字有正负之分,默认正,负以’-‘开头,紧接着’P’,下面所有字母都不区分大小写:
    ‘D’ – 天
    ‘H’ – 小时
    ‘M’ – 分钟
    ‘S’ – 秒
    字符’T’是紧跟在时分秒之前的,每个单位都必须由数字开始,且时分秒顺序不能乱,比如:P2DT3M5S,P3D,PT3S
    PT3M2S 等于 -PT-3M-2S

通过日期获取,这种方式实现是 between(Temporal startInclusive, Temporal endExclusive) 方法,该方法获取两个时间段的Duration实例, Temporal 有多种实现,其中就有jdk1.8中添加的 LocalTime 等等

下面介绍基本的公共方法,主要是对Duration做一些基本操作:

  • 时间转换为时分秒:toSeconds(),to…()等方法
  • 两个Duration比较:compareTo()相等返回0,大于返回正数,小于返回负数
  • 获取指定单位的数值:get(TemporalUnit unit)
  • 获取Duration中所有单位:getUnits()
  • 获取Duration绝对值:abs()
  • 给指定Temporal添加一个Duration:addTo(Temporal temporal)
  • getNano() 获取纳秒数,获取的是纳秒部分的值,而不是转换成纳秒
  • getSeconds() 获取秒数,获取的是秒部分的值,而不是转换成秒
  • plusSeconds(), plus…() 加法 增加时间(时分秒),返回新实例
  • dividedBy(long divisor) 除法,返回一个新的Duration实例,内部转换成秒来实现
  • multipliedBy(long multiplicand) 惩罚,返回一个新的Duration实例,内部同样也是转换成秒来实现
  • minus…()相关方法 减法:注意是用你输入参数去减,返回的是新的Duration实例
  • 四则运算都是返回的新实例,并没有对旧实例进行修改,这是需要注意的,所以千万别忽略了返回值。
  • 返回一个负的Duration实例:negated() 比如 PT1.4S 返回 PT-1.4S
  • isZero() 判断是否是 ZERO 实例
  • withSeconds() 和 withNanos() 两个方法通过传入秒数或者纳秒数来构造一个Duration副本

最后来看下Duration实现原理,其实很简单,Duration内部维护了 seconds 和 nanos 两个内部 long 型变量用来记录实际的Duration值,上面的所有操作其实基本都是对这两个内部变量的操作。

构造Duration实例中核心方法是:

private static Duration create(long seconds, int nanoAdjustment) {if ((seconds | nanoAdjustment) == 0) {return ZERO;}return new Duration(seconds, nanoAdjustment);
}

从这里也可以看出对Duration的实例化,其实就是对内部两个变量的一个赋值操作。

最后总结一下Duration最实用的一个功能其实是 between 方法,因为有很多时候我们需要计算两个日期之间的天数或者小时数,用这个就可以很方便的进行操作。

Java 8-Duration 详解相关推荐

  1. 4.6 W 字总结!Java 11—Java 17特性详解

    作者 | 民工哥技术之路 来源 | https://mp.weixin.qq.com/s/SVleHYFQeePNT7q67UoL4Q Java 11 特性详解 基于嵌套的访问控制 与 Java 语言 ...

  2. Java内存溢出详解之Tomcat配置

    Java内存溢出详解 转自:http://elf8848.iteye.com/blog/378805 一.常见的Java内存溢出有以下三种: 1. java.lang.OutOfMemoryError ...

  3. java基础(十三)-----详解内部类——Java高级开发必须懂的

    java基础(十三)-----详解内部类--Java高级开发必须懂的 目录 为什么要使用内部类 内部类基础 静态内部类 成员内部类 成员内部类的对象创建 继承成员内部类 局部内部类 推荐博客 匿名内部 ...

  4. Java类加载机制详解【java面试题】

    Java类加载机制详解[java面试题] (1)问题分析: Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息:如构造函数 ...

  5. Java线程池详解学习:ThreadPoolExecutor

    Java线程池详解学习:ThreadPoolExecutor Java的源码下载参考这篇文章:Java源码下载和阅读(JDK1.8) - zhangpeterx的博客 在源码的目录java/util/ ...

  6. Java 线程池详解学习:FixedThreadPool,CachedThreadPool,ScheduledThreadPool...

    Java常用的线程池有FixedThreadPool和CachedThreadPool,我们可以通过查看他们的源码来进行学习. Java的源码下载参考这篇文章:Java源码下载和阅读(JDK1.8) ...

  7. 关于Java的Classpath详解

    关于Java的Classpath详解 Java 的新入门者对classpath往往比较困惑,为何在开发环境中能运行的东东出去就不好,或在外面运行的东东挺溜的进了开发环境就死菜. java的优点就是他是 ...

  8. java异常体系结构详解

    java异常体系结构详解 参考文章: (1)java异常体系结构详解 (2)https://www.cnblogs.com/hainange/p/6334042.html 备忘一下.

  9. java异常处理机制详解

    java异常处理机制详解 参考文章: (1)java异常处理机制详解 (2)https://www.cnblogs.com/vaejava/articles/6668809.html 备忘一下.

  10. Java内存溢出详解

    Java内存溢出详解 一.常见的Java内存溢出有以下三种: 1. java.lang.OutOfMemoryError: Java heap space ----JVM Heap(堆)溢出 JVM在 ...

最新文章

  1. 十大Material Design开源项目
  2. PHP上传图片到数据库和存储到本地文件夹的方法
  3. 使用Try.NET创建可交互.NET文档
  4. 排球制作html,MAYA打造排球建模教程
  5. Java 连接LDAP实现验证与查询用户
  6. 多线程(9)-JUC集合
  7. java 通过id获取html代码_分享代码技巧:解决 $.(“#id“).val() 获取不到空格之后的值
  8. Android Launcher——ui框架,android混合开发专利
  9. Red Hat Enterprise Linux 8.0 安装(全网最详细版)
  10. 【熵系列-3】相对熵(或者 KL散度)
  11. smartprinter注册版_SmartPrinter下载 4.2 共享版
  12. 计算机推免资源(不定期更新)
  13. [1]技术浅谈——小刘对渗透攻击的一些见解
  14. linux防火墙更改端口号,Linux防火墙开放某端口号
  15. 【时光它会替我们记得】- 1024有奖征文
  16. 看最强大脑的数字华容道,尝试理解与总结
  17. 常见安全漏洞及整改建议
  18. I2C的ACK和NACK
  19. Linux设置开机自启
  20. 送福利 手把手教你快速配置腾讯云 Linux 服务器

热门文章

  1. 先收藏!只需三步,教你做好 618 大促复盘!
  2. mi8se android9,小米小米 8SE(安卓9.0)刷机解锁教程,看教程秒懂刷机,亲测可用...
  3. 运算符(笔记来自秦疆老师的视频笔记)
  4. 1.7 信息化发展与应用
  5. 自媒体人都在用这 5个素材网站
  6. 涨知识!十问“数字孪生”
  7. JVM内存区域和垃圾收集器
  8. 加大伯克利分校著名科学家:大数据的“冬天”即将到来
  9. 科技查新网站有哪些?
  10. rule34服务器不稳定,rule34网站