Java時間格式化原來這麼多玩法

時間過得真是快,現在已經是2022年了。作爲開發來說,時間處理是非常繁瑣的。從Java 8開始有了新的時間API、時間的處理更加優雅,不再需要藉助三方類庫,而且線程安全。今天來梳理一下新API的格式化,而且還要玩點你沒玩過的東西,點贊、轉發、再看走起來。

新API的時間格式化

新的時間API的時間格式化由java.time.format.DateTimeFormatter負責。

本地化時間

結合枚舉FormatStyle定義的風格,DateTimeFormatter預定義了基於本地(Locale)風格的時間格式。我們來看這段代碼:

        String format = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM)
                .format(ZonedDateTime.now());

如果你在中國,格式化結果:

2022年1月6日 下午4:22:01

如果你在美國:

Jan 6, 2022, 4:21:10 PM

有三個靜態方法及其重載來格式化本地化時間,具體已經整理成了思維導圖:

本地化時間

ISO/RFC規範格式

DateTimeFormatter還內置了ISORFC的時間格式,基於內置的DateTimeFormatter靜態實例。舉個例子:

        // 靜態實例
        DateTimeFormatter isoWeekDateFormatter = DateTimeFormatter.ISO_WEEK_DATE;
        // 執行格式化
        String format = isoWeekDateFormatter.format(LocalDateTime.now());
        // format = 2022-W01-4
        System.out.println("format = " + format);

其它的如下表格所示:

內置ISO、RFC規範格式

範式格式化

這種方式應該是我們最常用的方式了。通過字母和符號來構建一個範式(Patterns),使用ofPattern(String)或者ofPattern(String, Locale)方法傳遞構建的範式。例如,d MMM uuuu將把2011-12-03格式化爲2011年12月3日。從一個模式中創建的格式可以根據需要多次使用,它是不可改變的,並且是線程安全的。

相信什麼yyyy-MM-dd HH:mm:ss你都玩膩了,胖哥給你看點你沒見過的:

        // 最後面是兩個V 不是W 單個V會報錯 
        String pattern = "G uuuu'年'MMMd'日' ZZZZZ VV";
        String format= DateTimeFormatter.ofPattern(pattern).format(ZonedDateTime.now());
        // format = 2022-W01-4
        System.out.println("format = " + format);

輸出:

format = 公元 2022年1月7日 +08:00 Asia/Shanghai

表格給你整理好了,你試一試:

格式化符號對照表

關注公衆號:Felordcn 獲取更多資訊

個人博客:https://felord.cn

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章