Java 8 Duration 详解

栏目: 编程语言 · Java · 发布时间: 5年前

内容简介:最近发现spring boot中的有些配置使用了

最近发现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 方法,因为有很多时候我们需要计算两个日期之间的天数或者小时数,用这个就可以很方便的进行操作。

BugHome版权所有丨转载请注明出处:https://minei.me/archives/342.html


以上所述就是小编给大家介绍的《Java 8 Duration 详解》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

标签: duration

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

结网

结网

王坚 / 人民邮电出版社 / 2010-4 / 55.00元

本书作者一直从事互联网产品的研究和实战,经验丰富,同时作为导师,指导了大量优秀的产品经理,本书的内容也是作者8年来培养产品经理新兵的经验集萃。如果你缺乏培养产品经理的教材,本书正好总结了产品经理知识体系,无疑是你很好的选择。 本书覆盖了相当全面的互联网知识,对于想要了解互联网行业或想要借助互联网进行营销的人来说,都是很好的入门读物。 本书并不是一本完善的互联网创业指南,而是写给胸怀互联......一起来看看 《结网》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

在线进制转换器
在线进制转换器

各进制数互转换器

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码