最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一篇文章弄懂Java8中的時間處理

 更新時間:2022年01月09日 11:09:47   作者:wbo112  
Java8以前Java處理日期、日歷和時間的方式一直為社區(qū)所詬病,將 java.util.Date設(shè)定為可變類型,以及SimpleDateFormat的非線程安全使其應(yīng)用非常受限,下面這篇文章主要給大家介紹了關(guān)于Java8中時間處理的相關(guān)資料,需要的朋友可以參考下

前言

java8借鑒了第三方日期庫joda很多的優(yōu)點

java.time包

類名描述
Instant時間戳
Duration持續(xù)時間,時間差
LocalDate只包含日期,比如:2020-05-20
LocalTime只包含時間,比如:13:14:00
LocalDateTime包含日期和時間,比如:2020-05-20 13:14:00
Period時間段
ZoneOffset時區(qū)偏移量,比如:+8:00
ZonedDateTime帶時區(qū)的時間
Clock時鐘,比如獲取目前美國紐約的時間

java.time.format包

類名描述
DateTimeFormatter時間格式化

Java8提供了全新的時間處理框架,這里就可以完全丟棄之前的Date、Calendar了。

具體的API的使用都是比較簡單的。這里就不展開介紹了。

這里主要介紹下一些主要的類

LocalDateTime

我們一般常用的就是這個了,用這個來表示日期時間。如LocalDateTime.now()就可以基于當(dāng)前默認時區(qū)得到當(dāng)前的日期時間。

由于全球有好多時區(qū),同一個日期時間,在不同的時區(qū),反映到時間軸上是不同的。

LocalDateTime類型的日期時間是沒包含時區(qū),所以它不能對應(yīng)到時間軸上。說的直白點就是LocalDateTime不能轉(zhuǎn)換成自 1970-01-01T00:00:00Z 紀(jì)元以來的毫秒數(shù)

ZonedDateTime

ZonedDateTime可以理解就是在LocalDateTime的基礎(chǔ)上添加上時區(qū),所以它是可以反映到時間軸上的。

下面用夏令時舉個例子來看看LocalDateTime和LocalDateTime的區(qū)別。

夏令時是什么這里就不展開了,具體可以網(wǎng)上查下??纯次覈?986開始的夏令時。

簡單來說就是在夏令時開始的時候,將時鐘向后撥1個小時。對應(yīng)我國1986年開始的夏令時的做法,就是在每年四月中旬的第一個星期日當(dāng)時鐘到達凌晨2點時,直接將時鐘撥到凌晨3點。也就是凌晨1點和凌晨3點之間之差1個小時。

由于1986年是開始實施的,所以1986年的夏令時是1986年5月4日開始的。

我們看看1987年的夏令時開始

根據(jù)我國當(dāng)時的夏令時政策,1987年應(yīng)該是1987年4月12日開始的。具體來說就是在1987-04-12 01:00:00 過一個小時后,時間應(yīng)該是1987-04-12 03:00:00

        LocalDateTime localDateTime = LocalDateTime.of(1987, 4, 12, 1, 0, 0, 0);
        System.out.println(localDateTime);
        System.out.println(localDateTime.plusHours(1));

執(zhí)行上面的代碼就可以看到當(dāng)1987-04-12 01:00:00增加1小時后,時間是1987-04-12 02:00:00。

這個也好理解,因為LocalDateTime并沒有包含時區(qū),1987-04-12 02:00:00這個夏令時只是中國的,并不是全球統(tǒng)一的,如果1987-04-12 02:00:00將直接變成1987-04-12 03:00:00放到中國以外的其他國家就是錯誤的。

        ZonedDateTime zonedDateTime = ZonedDateTime.of(1987, 4, 12, 1, 0, 0, 0, ZoneId.systemDefault());
        System.out.println(zonedDateTime);
        System.out.println(zonedDateTime.plusHours(1));

執(zhí)行上面的代碼可以看到當(dāng)1987-04-12 01:00:00增加1小時后,時間變成了是1987-04-12 03:00:00。這個也就能說明問題了。

同時從打印結(jié)果也能看到時區(qū)自動從+08:00[Asia/Shanghai]變成了+09:00[Asia/Shanghai]

Instant

Instant表示時間軸上的一個瞬時時間,簡單來說就是表示自 1970-01-01T00:00:00Z 紀(jì)元以來的秒數(shù)、毫秒數(shù)等等

ZonedDateTime和Instant都能對應(yīng)到時間軸上,所以它們兩個是可以相互轉(zhuǎn)化的。

        Instant instant = zonedDateTime.toInstant();
        ZonedDateTime zonedDateTime1 = instant.atZone(zonedDateTime.getZone());

其他一些常用的各種類型之間轉(zhuǎn)化的API

        //ZonedDateTime 轉(zhuǎn)  Instant
        Instant instant = ZonedDateTime.now().toInstant();

 
        //獲取UTC毫秒數(shù)
        long epochMilli = instant.toEpochMilli();
        

        //Instant 轉(zhuǎn)  ZonedDateTime
        ZonedDateTime zonedDateTime = instant.atZone(ZoneId.systemDefault());

        //字符串 轉(zhuǎn)  ZonedDateTime
        ZonedDateTime zonedDateTime2 = ZonedDateTime.parse(zonedDateTime.toString());

        //基于UTC 偏移的毫秒數(shù)
        int totalSeconds = zonedDateTime.getOffset().getTotalSeconds();

        //Instant 轉(zhuǎn)  LocalDateTime
        LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());

        //LocalDateTime 轉(zhuǎn)  ZonedDateTime
        ZonedDateTime zonedDateTime1 = localDateTime.atZone(ZoneId.systemDefault());


        ZoneRules zoneRules = ZoneId.systemDefault().getRules();

        //判斷是否是夏令時時間
        boolean daylightSavings = zoneRules.isDaylightSavings(instant);


        Calendar calendar = Calendar.getInstance(TimeZone.getDefault());
        //Calendar 轉(zhuǎn) Instant
        Instant instant1 = calendar.toInstant();

        //Calendar  轉(zhuǎn)   ZonedDateTime
        Calendar now = Calendar.getInstance();
        ZonedDateTime zdt = ZonedDateTime.ofInstant(now.toInstant(), ZoneId.systemDefault()));

        //Date 轉(zhuǎn) Instant
        Date date = new Date();
        Instant inst = date.toInstant();

        // Instant 轉(zhuǎn) Date
        Date newDate = Date.from(inst);

        //GregorianCalendar 轉(zhuǎn) ZonedDateTime
        GregorianCalendar cal = GregorianCalendar.from(ZonedDateTime.now());
        TimeZone tz = cal.getTimeZone();
        ZonedDateTime zdt1 = cal.toZonedDateTime();
        
        //ZonedDateTime 轉(zhuǎn) GregorianCalendar
        GregorianCalendar newCal = GregorianCalendar.from(zdt1);

        LocalDateTime ldt = zdt.toLocalDateTime();
        LocalDate date2 = zdt.toLocalDate();
        LocalTime time2 = zdt.toLocalTime();

更詳細的資料,還是看官方的文檔吧。https://docs.oracle.com/javase/tutorial/datetime/index.html

總結(jié)

到此這篇關(guān)于Java8中時間處理的文章就介紹到這了,更多相關(guān)Java8時間處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springboot接口參數(shù)校驗JSR303的實現(xiàn)

    springboot接口參數(shù)校驗JSR303的實現(xiàn)

    本文主要介紹了springboot接口參數(shù)校驗JSR303的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • java鏈表的常見簡單面試算法題詳解

    java鏈表的常見簡單面試算法題詳解

    文章總結(jié):本文主要介紹了單鏈表的基本操作,包括頭插法、尾插法、鏈表翻轉(zhuǎn)、鏈表成環(huán)判斷、成環(huán)位置判斷、成環(huán)長度判斷,以及有序鏈表的合并,通過實例和代碼示例,詳細講解了每種操作的原理和實現(xiàn)方法
    2025-01-01
  • mybatis源碼解讀之executor包懶加載功能?

    mybatis源碼解讀之executor包懶加載功能?

    這篇文章主要介紹了mybatis源碼解讀之executor包懶加載功能,mybatis的懶加載的實現(xiàn)由executor包的loader子包支持,下面文章詳細內(nèi)容需要的小伙伴可以參考一下
    2022-02-02
  • Springboot實現(xiàn)全局自定義異常的方法詳解

    Springboot實現(xiàn)全局自定義異常的方法詳解

    這篇文章主要介紹了Springboot實現(xiàn)全局自定義異常的方法詳解,SpringBoot的項目已經(jīng)對有一定的異常處理了,但是對于我們開發(fā)者而言可能就不太合適了,因此我們需要對這些異常進行統(tǒng)一的捕獲并處理,需要的朋友可以參考下
    2023-11-11
  • HashMap和List遍歷方法及如何遍歷刪除元素總結(jié)

    HashMap和List遍歷方法及如何遍歷刪除元素總結(jié)

    在本篇文章中小編給大家分享了關(guān)于HashMap和List遍歷方法及如何遍歷刪除元素知識點總結(jié),需要的朋友們參考下。
    2019-05-05
  • Java自動生成趨勢比對數(shù)據(jù)的方法分享

    Java自動生成趨勢比對數(shù)據(jù)的方法分享

    這篇文章主要和大家分享了一種Java自動生成趨勢比對數(shù)據(jù)的方法設(shè)計及實現(xiàn),文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-04-04
  • java 中冒泡、二分、快速算法詳解

    java 中冒泡、二分、快速算法詳解

    這篇文章主要介紹了java 中冒泡、二分、快速算法詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • Java 8對LinkedList元素進行排序的方法詳解

    Java 8對LinkedList元素進行排序的方法詳解

    在Java中,LinkedList是一種基于鏈表的數(shù)據(jù)結(jié)構(gòu),與ArrayList相比,它在進行插入和刪除操作時表現(xiàn)出更好的性能,然而,LinkedList的元素排序也是開發(fā)中常見的需求之一,本文介紹了Java8對LinkedList元素進行排序的方法,需要的朋友可以參考下
    2024-11-11
  • SpringBoot使用@Cacheable時設(shè)置部分緩存的過期時間方式

    SpringBoot使用@Cacheable時設(shè)置部分緩存的過期時間方式

    這篇文章主要介紹了SpringBoot使用@Cacheable時設(shè)置部分緩存的過期時間方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 基于Java的正則表達式

    基于Java的正則表達式

    正則表達式,又稱正規(guī)表示法、常規(guī)表示法(英語:Regular Expression,在代碼中常簡寫為regex、regexp或RE),計算機科學(xué)的一個概念
    2017-05-05

最新評論

美姑县| 神农架林区| 大埔区| 娱乐| 营山县| 南汇区| 湘潭市| 油尖旺区| 玛曲县| 大同市| 柳林县| 高密市| 静海县| 司法| 清徐县| 屏东县| 镶黄旗| 多伦县| 甘谷县| 会宁县| 闵行区| 襄垣县| 鹤峰县| 黑龙江省| 无锡市| 博野县| 保康县| 乌什县| 宜州市| 安丘市| 青海省| 灯塔市| 隆子县| 高要市| 新乐市| 祁东县| 石屏县| 辽阳县| 赣州市| 湘乡市| 茂名市|