Java 8 Duration 详解

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

内容简介:最近发现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

猜你喜欢:

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

Ajax for Web Application Developers

Ajax for Web Application Developers

Kris Hadlock / Sams / 2006-10-30 / GBP 32.99

Book Description Reusable components and patterns for Ajax-driven applications Ajax is one of the latest and greatest ways to improve users’ online experience and create new and innovative web f......一起来看看 《Ajax for Web Application Developers》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

SHA 加密
SHA 加密

SHA 加密工具