JAVA時(shí)間存儲(chǔ)類Period和Duration使用詳解
前言
在JDK1.8中區(qū)分了時(shí)間和日期的概念,所以有了兩個(gè)對應(yīng)的類,LocalDate和LocalTime,區(qū)別如下
- LocalDate表示日期,不會(huì)包含具體的時(shí)間,例如2022-09-26。
- LocalTime表示時(shí)間,不會(huì)包含日期,僅僅包含時(shí)分秒。
簡單使用如下
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ū)分了時(shí)間和日期的概念后,為方便使用JDK1.8又推出了兩個(gè)用于存儲(chǔ)時(shí)間和日期的類,分別為Duraction和Period,這兩個(gè)類的區(qū)別和LocalDate和LocalTime是一一對應(yīng)的。
- Period:表示日期的存儲(chǔ)用于度量年月日,一般用于存儲(chǔ)多個(gè)日期之間相差的日期值。
- Duraction:表示時(shí)間的存儲(chǔ)用于度量時(shí)分秒,一般用于存儲(chǔ)多個(gè)時(shí)間之間相差的時(shí)間值。
Period類
Period可以應(yīng)用于存儲(chǔ)兩個(gè)日期之間的日期差,存儲(chǔ)年月日。
LocalDate localDate1 = LocalDate.of(2022,8,20); LocalDate localDate2 = LocalDate.now(); // 計(jì)算兩個(gè)日期之間的差值 Period between = Period.between(localDate1, localDate2); // 區(qū)間是否為0 System.out.println(between.isZero()); // 區(qū)間是否為負(fù)數(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
實(shí)例化
// Period對象實(shí)例化可以直接調(diào)用of方法指定年月日,注意Period只做日期存儲(chǔ)所以不會(huì)校驗(yàn)?zāi)暝氯帐欠穹先掌谝?guī)范?。?! Period period = Period.of(2022, 20, 5); // 所以當(dāng)我們想取正常日期值時(shí)可以調(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ù)值,不會(huì)修改年月 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對象存儲(chǔ)的日期 Temporal temporal = period1.addTo(localDate); // 返回結(jié)果:4045-08-11(日期對象) System.out.println(temporal); Period period2 = Period.of(1, 1, 2); // 給指定日期減去Period對象存儲(chǔ)的日期 LocalDate localDate1 = LocalDate.of(2022,1,2); // 返回結(jié)果:2020-11-30(日期對象) System.out.println(period2.subtractFrom(localDate1));
Duraction類
Duraction可以應(yīng)用于存儲(chǔ)兩個(gè)時(shí)間之間的時(shí)間差,可以存儲(chǔ)時(shí)分秒。
LocalTime localTime1 = LocalTime.of(10,1,2); LocalTime localTime2 = LocalTime.now(); // 得出時(shí)間區(qū)間間隔的時(shí)間差 Duration between = Duration.between(localTime1, localTime2); // 區(qū)間相差天數(shù) System.out.println(between.toDays()); // 區(qū)間相差小時(shí) 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ū)間是否為負(fù) 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時(shí)間存儲(chǔ)類Period和Duration使用詳解的詳細(xì)內(nèi)容,更多關(guān)于JAVA時(shí)間存儲(chǔ)類Period Duration的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
TCP/IP協(xié)議中三次握手四次揮手的原理及流程分析
這篇文章主要介紹了TCP/IP協(xié)議中三次握手四次揮手的原理及流程分析,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11SpringBoot編譯target目錄下沒有resource下的文件踩坑記錄
這篇文章主要介紹了SpringBoot編譯target目錄下沒有resource下的文件踩坑記錄,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08SpringBoot應(yīng)用部署到外置Tomcat的實(shí)現(xiàn)
SpringBoot內(nèi)置tomcat使用很方便,本文主要介紹了SpringBoot應(yīng)用部署到外置Tomcat的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-07-07Java獲取resources下文件路徑的幾種方法及遇到的問題
這篇文章主要給大家介紹了關(guān)于Java獲取resources下文件路徑的幾種方法及遇到的問題,在Java開發(fā)中經(jīng)常需要讀取項(xiàng)目中resources目錄下的文件或獲取資源路徑,需要的朋友可以參考下2023-12-12