日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

java 枚举内嵌枚举_高度有用的Java ChronoUnit枚举

發(fā)布時(shí)間:2023/12/3 java 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 枚举内嵌枚举_高度有用的Java ChronoUnit枚举 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

java 枚舉內(nèi)嵌枚舉

幾年前,我發(fā)表了博客文章“ The Highly有用的Java TimeUnit Enum ”,其中介紹了JDK 5引入的TimeUnit枚舉。 JDK 8引入了一個(gè)更新的枚舉ChronoUnit ,它比TimeUnit更適合于并發(fā)以外的上下文(例如日期/時(shí)間操作)。

位于所述java.time.temporal包 ,所述ChronoUnit類(lèi)實(shí)現(xiàn)TemporalUnit接口 ,接口廣泛使用的在高度期望 JDK 8導(dǎo)入日期/時(shí)間API 。 博客文章“ Java 8中的日期之間的天數(shù) ”演示了使用此類(lèi)來(lái)計(jì)算兩個(gè)Temporal實(shí)例之間的時(shí)間段 。

博客文章“ Java 9.硬編碼“永遠(yuǎn)”的地方。 ”介紹了JDK 9的“ TimeUnit類(lèi)中的兩個(gè)新方法” 。toChronoUnit()和of(ChronoUnit)這些方法支持將TimeUnit轉(zhuǎn)換為ChronoUnit以及將ChronoUnit為T(mén)imeUnit 。 并非ChronoUnit所有值都可以轉(zhuǎn)換為T(mén)imeUnit的等效值,在這種情況下,將拋出IllegalArgumentException 。

關(guān)于ChronoUnit中每個(gè)值的Javadoc注釋描述了每個(gè)值代表什么時(shí)間單位。 但是,對(duì)ChronoUnit每個(gè)值返回什么樣的Duration ,這對(duì)我來(lái)說(shuō)很有趣。 以下代碼段會(huì)將這些Duration的toString()表示形式寫(xiě)入ChronoUnit枚舉中的所有值的標(biāo)準(zhǔn)輸出。

顯示計(jì)時(shí)單位的持續(xù)時(shí)間

for (final ChronoUnit unit : ChronoUnit.values()) {final Duration duration = unit.getDuration();out.println(unit + ": " + duration + " (" + duration.getSeconds() + " seconds)"); }

執(zhí)行后,以上代碼將產(chǎn)生以下輸出:

Nanos: PT0.000000001S (0 seconds) Micros: PT0.000001S (0 seconds) Millis: PT0.001S (0 seconds) Seconds: PT1S (1 seconds) Minutes: PT1M (60 seconds) Hours: PT1H (3600 seconds) HalfDays: PT12H (43200 seconds) Days: PT24H (86400 seconds) Weeks: PT168H (604800 seconds) Months: PT730H29M6S (2629746 seconds) Years: PT8765H49M12S (31556952 seconds) Decades: PT87658H12M (315569520 seconds) Centuries: PT876582H (3155695200 seconds) Millennia: PT8765820H (31556952000 seconds) Eras: PT8765820000000H (31556952000000000 seconds) Forever: PT2562047788015215H30M7.999999999S (9223372036854775807 seconds)

上面顯示的每個(gè)Duration字符串表示形式上的“ PT”前綴表示根據(jù)ISO-8601標(biāo)準(zhǔn) ,該表示形式是“期間”持續(xù)時(shí)間標(biāo)記(“ P”)和“時(shí)間”指示(“ T”)。 “ S”,“ M”和“ H”分別是秒,分鐘和小時(shí)。 的值ChronoUnit代表時(shí)間單位小于秒( NANOS , MICROS ,和MILLIS )示出了“0秒”,因?yàn)樗鼈兪切∮?秒,返回值是一個(gè)整體long 。

關(guān)于ChronoUnit類(lèi)中定義的每個(gè)值的Javadoc注釋編寫(xiě)得很好。 它們遵循我的想法,是Javadoc的“最佳實(shí)踐”:在Javadoc中放置簡(jiǎn)潔但內(nèi)容豐富的初始句子,以顯示在生成HTML頁(yè)面的“方法摘要”部分中,并在該初始摘要之后的句子中放置其他有用的詳細(xì)信息句子。 例如, ChronoUnit.ERAS的Javadoc注釋指出:“ 代表時(shí)代概念的單位。 ISO日歷系統(tǒng)沒(méi)有紀(jì)元,因此不可能在日期或日期時(shí)間中添加紀(jì)元。 人為地將時(shí)代的估計(jì)持續(xù)時(shí)間定義為1,000,000,000年。 與其他日歷系統(tǒng)一起使用時(shí),該裝置沒(méi)有任何限制。” “方法摘要”中顯示的是加粗的句子(我加了強(qiáng)調(diào)),此處顯示的全部文本完整顯示在方法上方。

在ChronoUnit枚舉中,更有趣的值之一是FOREVER 。 如上面代碼清單的輸出所示, FOREVER值的Duration為“ PT2562047788015215H30M7.999999999S”,對(duì)應(yīng)于2562047788015215小時(shí),30分鐘和7.999999999秒。 或者,正如Grzegorz Gajos所說(shuō)的那樣,“ Java 永遠(yuǎn)將其定義為9 223 372 036 854 775 807秒。 這是2.92277266×10 11年。 最好確保在超時(shí)之前安排在應(yīng)用程序中進(jìn)行Java升級(jí)。”

ChronoUnit.FOREVER會(huì)有用? 其基于Javadoc的描述解釋了其存在的主要原因:“代表永遠(yuǎn)概念的人工單位。 這主要與TemporalField一起使用,以表示無(wú)限制的字段,例如年份或時(shí)代。 人為地將時(shí)代的估計(jì)持續(xù)時(shí)間定義為Duration支持的最大持續(xù)Duration 。”

TimeUnit是使用Java的并發(fā)構(gòu)造的有用枚舉 ,并且可以在并發(fā)以外的其他上下文中使用,只要考慮了對(duì)這些其他上下文的一些嚴(yán)格限制即可。 JDK 8引入的ChronoUnit對(duì)于這些非并發(fā)上下文來(lái)說(shuō)是一個(gè)更好的枚舉,并且特別設(shè)計(jì)用于JDK 8 Date / Time API

翻譯自: https://www.javacodegeeks.com/2018/01/highly-useful-java-chronounit-enum.html

java 枚舉內(nèi)嵌枚舉

總結(jié)

以上是生活随笔為你收集整理的java 枚举内嵌枚举_高度有用的Java ChronoUnit枚举的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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