JAVA時間存儲類Period和Duration使用詳解
前言
在JDK1.8中區(qū)分了時間和日期的概念,所以有了兩個對應的類,LocalDate和LocalTime,區(qū)別如下
- LocalDate表示日期,不會包含具體的時間,例如2022-09-26。
- LocalTime表示時間,不會包含日期,僅僅包含時分秒。
簡單使用如下
LocalDate localDate = LocalDate.now(); // 執(zhí)行結(jié)果:2022-09-26 System.out.println(localDate); LocalTime localTime = LocalTime.now(); // 執(zhí)行結(jié)果:16:17:12.381 System.out.println(localTime);
區(qū)分了時間和日期的概念后,為方便使用JDK1.8又推出了兩個用于存儲時間和日期的類,分別為Duraction和Period,這兩個類的區(qū)別和LocalDate和LocalTime是一一對應的。
- Period:表示日期的存儲用于度量年月日,一般用于存儲多個日期之間相差的日期值。
- Duraction:表示時間的存儲用于度量時分秒,一般用于存儲多個時間之間相差的時間值。
Period類
Period可以應用于存儲兩個日期之間的日期差,存儲年月日。
LocalDate localDate1 = LocalDate.of(2022,8,20); LocalDate localDate2 = LocalDate.now(); // 計算兩個日期之間的差值 Period between = Period.between(localDate1, localDate2); // 區(qū)間是否為0 System.out.println(between.isZero()); // 區(qū)間是否為負數(shù) System.out.println(between.isNegative()); // 獲取區(qū)間相差幾年、幾月、幾日 System.out.println(between.getYears()); System.out.println(between.getMonths()); System.out.println(between.getDays()); // 區(qū)間相差的總月份 System.out.println(between.toTotalMonths());
除了主要場景外還提供一些其它API
實例化
// Period對象實例化可以直接調(diào)用of方法指定年月日,注意Period只做日期存儲所以不會校驗年月日是否符合日期規(guī)范?。?! Period period = Period.of(2022, 20, 5); // 所以當我們想取正常日期值時可以調(diào)用normalized方法轉(zhuǎn)換 Period period1 = Period.of(2022, 19, 9); // 展示結(jié)果:2022==19 System.out.println(period1.getYears()+"=="+period1.getMonths()); Period period2 = period1.normalized(); // 展示結(jié)果:2023==7 System.out.println(period2.getYears()+"=="+period2.getMonths());
設(shè)置值
Period period1 = Period.of(2022, 19, 9); // 值為:9 System.out.println(period1.getDays()); // 修改天數(shù)值,不會修改年月 Period period2 = period1.withDays(2); // 值為:2 System.out.println(period2.getDays()); //================================================= // plus相加,minus相減 Period period3 = period1.plusDays(2); // 值為:11 System.out.println(period3.getDays());
年月日都可以用with、plus、minus相關(guān)API設(shè)置值~
其它API
Period period1 = Period.of(2022, 19, 9); LocalDate localDate = LocalDate.of(2022,1,2); // 給指定日期加上Period對象存儲的日期 Temporal temporal = period1.addTo(localDate); // 返回結(jié)果:4045-08-11(日期對象) System.out.println(temporal); Period period2 = Period.of(1, 1, 2); // 給指定日期減去Period對象存儲的日期 LocalDate localDate1 = LocalDate.of(2022,1,2); // 返回結(jié)果:2020-11-30(日期對象) System.out.println(period2.subtractFrom(localDate1));
Duraction類
Duraction可以應用于存儲兩個時間之間的時間差,可以存儲時分秒。
LocalTime localTime1 = LocalTime.of(10,1,2);
LocalTime localTime2 = LocalTime.now();
// 得出時間區(qū)間間隔的時間差
Duration between = Duration.between(localTime1, localTime2);
// 區(qū)間相差天數(shù)
System.out.println(between.toDays());
// 區(qū)間相差小時
System.out.println(between.toHours());
// 區(qū)間相差分鐘
System.out.println(between.toMinutes());
// 區(qū)間中的秒數(shù)
System.out.println(between.getSeconds());
// 區(qū)間相差毫秒
System.out.println(between.toMillis());
// 區(qū)間相差納秒
System.out.println(between.toNanos());
System.out.println("======================");
Duration duration = Duration.ZERO;
// 區(qū)間是否為0
System.out.println(duration.isZero());
// 區(qū)間是否為負
System.out.println(between.isNegative());
其它API
Duration duration = Duration.ofSeconds(10); // 值為:10 System.out.println(duration.getSeconds()); // 值取反 Duration duration1 = duration.negated(); // 值為:-10 System.out.println(duration1.getSeconds()); // 值除上指定值,得商 Duration duration2 = duration.dividedBy(2); // 值為:5 System.out.println(duration2.getSeconds()); // 取絕對值 Duration duration3 = Duration.ofSeconds(-9).abs(); // 值為:9 System.out.println(duration3.getSeconds());
Duration對象同樣有minus、plus、with相關(guān)方法,使用方法可以參考Period對象使用。
以上就是JAVA時間存儲類Period和Duration使用詳解的詳細內(nèi)容,更多關(guān)于JAVA時間存儲類Period Duration的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
使用SpringBoot+OkHttp+fastjson實現(xiàn)Github的OAuth第三方登錄
這篇文章主要介紹了使用SpringBoot+OkHttp+fastjson實現(xiàn)Github的OAuth第三方登錄,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-02-02
Java使用selenium爬取b站動態(tài)的實現(xiàn)方式
本文主要介紹了Java使用selenium爬取b站動態(tài)的實現(xiàn)方式,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-01-01
go語言題解LeetCode88合并兩個有序數(shù)組示例
這篇文章主要為大家介紹了go語言題解LeetCode88合并兩個有序數(shù)組示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-12-12
SkyWalking?自定義插件(Spring?RabbitMQ)具體分析過程
這篇文章主要介紹了SkyWalking?自定義插件(Spring?RabbitMQ)具體分析過程,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-02-02
@ComponentScan在spring中無效的原因分析及解決方案
這篇文章主要介紹了@ComponentScan在spring中無效的原因分析及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11
Springboot3.3 整合Cassandra 4.1.5的詳細過程
這篇文章主要介紹了Springboot3.3 整合Cassandra 4.1.5的詳細過程,本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧2024-06-06

