最近发现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 初始化duration_Java 8-Duration 详解相关推荐

  1. java 初始化duration_JAVA 8 DURATION 详解

    最近发现spring boot中的有些配置使用了Duration,于是详细的看了Duration这个类 Duration是在Java8中加入的,主要是用来计算日期,差值之类的. Duration被声明 ...

  2. java实现标准化考试系统详解(四)-----初始化操作实现

    (一)初始化操作实现 如上图所示当管理员需要更改适用工程.试题数量.考试时间时直接在文本中更改就好我们只需要每次在用户打开程序时初始化这些参数就可以 1.初始化试题模型,这里需要实现随机抽题,方法是用 ...

  3. Java中的main()方法详解

    源文作者:leizhimin    源文链接:http://lavasoft.blog.51cto.com/62575/53263 源文作者版权申明: 版权声明:原创作品,允许转载,转载时请务必以超链 ...

  4. 【Java基础】HashMap原理详解

    [Java基础]HashMap原理详解 HashMap的实现 1. 数组 2.线性链表 3.红黑树 3.1概述 3.2性质 4.HashMap扩容死锁 5. BATJ一线大厂技术栈 HashMap的实 ...

  5. Java中的Runtime类详解

    Java中的Runtime类详解 1.类注释 /**Every Java application has a single instance of class Runtime that allows ...

  6. [java] 虚拟机(JVM)底层结构详解[转]

    [java] 虚拟机(JVM)底层结构详解[转] 本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.net/csh624366188 在以前的博客里面,我们介绍了在java领 ...

  7. 转:Java 7 种阻塞队列详解

    转自: Java 7 种阻塞队列详解 - 云+社区 - 腾讯云队列(Queue)是一种经常使用的集合.Queue 实际上是实现了一个先进先出(FIFO:First In First Out)的有序表. ...

  8. 【Java SE】封装的详解

    篮球哥温馨提示:编程的同时不要忘记锻炼哦! 因为热爱,所以编程 目录 1.封装 1.1 什么是封装? 2.2 访问权限 2.3 private 简单使用 2.封装之包的概念 2.1 什么是包? 2.2 ...

  9. Java开发常见面试题详解(LockSupport,AQS,Spring循环依赖,Redis)_3

    Java开发常见面试题详解(LockSupport,AQS,Spring循环依赖,Redis)_3 总览 问题 详解 String.intern()的作用 link LeetCode的Two Sum题 ...

  10. JVM调优系列--Java命令选项(参数)--大全/详解/常用

    原文网址:JVM调优系列--Java命令选项(参数)--大全/详解/常用_IT利刃出鞘的博客-CSDN博客 简介 说明        本文介绍Java的java命令用法,包括:常用用法.选项大全. J ...

最新文章

  1. 2021年大数据Spark(八):环境搭建集群模式 Standalone HA
  2. 如何发现数据中的异常值?对异常值是怎么处理的?
  3. Gym 101741 K(AC自动机)
  4. golang中的mysql类型对应
  5. 移动端访问mysql_java – (可能)数百个移动客户端访问MySQL数据库的最佳方法是什么?...
  6. python自学网站需要多长时间-怎么自学python,大概要多久?
  7. 气象数据领航无人飞行器线路优化大赛解决方案(3rd place)
  8. Sql自动配置器原理及其说明
  9. NIO框架入门(一):服务端基于Netty4的UDP双向通信Demo演示
  10. Winform中ComcoBox控件设置选定项
  11. 正交试验案例分析全步骤
  12. hdu 3987 - 最小割最少割边
  13. 设备选型的重要性分析
  14. MIPAV - Talairach ACPC transform
  15. 4 HQL操作之 -- DDL命令
  16. CUP发卡机构(POS收单行)代码表
  17. SuperMap GIS管线数据优化
  18. iphone更新运营商服务器,iphone更新运营商配置文件操作方法
  19. 为什么HashTable不能存null键和null值,而HashMap却可以?
  20. java游戏开发杂谈 - 实现游戏主菜单

热门文章

  1. default argument given of parameter 的问题
  2. cocos2dX 之CCParticle
  3. List的方法和属性 方法或属性 作用
  4. 【APP】centos 5.X安装网络和系统监控管理平台--OpenNMS
  5. CentOS中安装git
  6. 2008年CCNA第三学期第一单元中文题目(2008-12-21 18:30:01
  7. Rsync+inotify搭建实时同步系统
  8. 理解C++ lvalue与rvalue
  9. Oracle 备份与恢复学习笔记(6_1)
  10. Fedora19 搭建LAMP环境