日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

java 初始化duration_Java 8-Duration 详解

發(fā)布時間:2025/3/20 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 初始化duration_Java 8-Duration 详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

最近發(fā)現(xiàn)spring boot中的有些配置使用了 Duration ,于是詳細的看了 Duration 這個類

Duration 是在 Java 8中加入的,主要是用來計算日期,差值之類的。

Duration 被聲明final(immutable),并且線程安全。

先看下 Duration 的實例化方式,由于構(gòu)造器被私有了,對外只提供了一個 ZERO 實例,主要是使用靜態(tài)工廠方法來進行實例化

自定義初始化方式,這種方式主要是以一系列of…()方法為主,可以自定義時分秒。

of(long amount, TemporalUnit unit) 在 ZERO 的基礎(chǔ)上加上一定時間,第一個參數(shù)指定數(shù)量,第二個指定單位,單位可使用 ChronoUnit (實現(xiàn)了 TemporalUnit )

from(TemporalAmount amount) 通過TemporalAmount獲取一個Duration實例,也是在 ZERO 的基礎(chǔ)上增加

轉(zhuǎn)換字符串方式,類似于 SimpleDateFormat 的格式化日期方式

Duration 字符串類似數(shù)字有正負之分,默認正,負以’-‘開頭,緊接著’P’,下面所有字母都不區(qū)分大小寫:

‘D’ – 天

‘H’ – 小時

‘M’ – 分鐘

‘S’ – 秒

字符’T’是緊跟在時分秒之前的,每個單位都必須由數(shù)字開始,且時分秒順序不能亂,比如:P2DT3M5S,P3D,PT3S

PT3M2S 等于 -PT-3M-2S

通過日期獲取,這種方式實現(xiàn)是 between(Temporal startInclusive, Temporal endExclusive) 方法,該方法獲取兩個時間段的Duration實例, Temporal 有多種實現(xiàn),其中就有jdk1.8中添加的 LocalTime 等等

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

時間轉(zhuǎn)換為時分秒:toSeconds(),to…()等方法

兩個Duration比較:compareTo()相等返回0,大于返回正數(shù),小于返回負數(shù)

獲取指定單位的數(shù)值:get(TemporalUnit unit)

獲取Duration中所有單位:getUnits()

獲取Duration絕對值:abs()

給指定Temporal添加一個Duration:addTo(Temporal temporal)

getNano() 獲取納秒數(shù),獲取的是納秒部分的值,而不是轉(zhuǎn)換成納秒

getSeconds() 獲取秒數(shù),獲取的是秒部分的值,而不是轉(zhuǎn)換成秒

plusSeconds(), plus…() 加法 增加時間(時分秒),返回新實例

dividedBy(long divisor) 除法,返回一個新的Duration實例,內(nèi)部轉(zhuǎn)換成秒來實現(xiàn)

multipliedBy(long multiplicand) 懲罰,返回一個新的Duration實例,內(nèi)部同樣也是轉(zhuǎn)換成秒來實現(xiàn)

minus…()相關(guān)方法 減法:注意是用你輸入?yún)?shù)去減,返回的是新的Duration實例

四則運算都是返回的新實例,并沒有對舊實例進行修改,這是需要注意的,所以千萬別忽略了返回值。

返回一個負的Duration實例:negated() 比如 PT1.4S 返回 PT-1.4S

isZero() 判斷是否是 ZERO 實例

withSeconds() 和 withNanos() 兩個方法通過傳入秒數(shù)或者納秒數(shù)來構(gòu)造一個Duration副本

最后來看下Duration實現(xiàn)原理,其實很簡單,Duration內(nèi)部維護了 seconds 和 nanos 兩個內(nèi)部 long 型變量用來記錄實際的Duration值,上面的所有操作其實基本都是對這兩個內(nèi)部變量的操作。

構(gòu)造Duration實例中核心方法是:

private static Duration create(long seconds, int nanoAdjustment) {

if ((seconds | nanoAdjustment) == 0) {

return ZERO;

}

return new Duration(seconds, nanoAdjustment);

}

從這里也可以看出對Duration的實例化,其實就是對內(nèi)部兩個變量的一個賦值操作。

最后總結(jié)一下Duration最實用的一個功能其實是 between 方法,因為有很多時候我們需要計算兩個日期之間的天數(shù)或者小時數(shù),用這個就可以很方便的進行操作。

總結(jié)

以上是生活随笔為你收集整理的java 初始化duration_Java 8-Duration 详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。