java 初始化duration_Java 8-Duration 详解
最近發現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 详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: springwebflux 页面_Spr
- 下一篇: mongodb的id的唯一性_探讨Mon