Java 時(shí)間格式化原來(lái)這么多玩法
時(shí)間過(guò)得真是快,現(xiàn)在已經(jīng)是2022年了。作為開(kāi)發(fā)來(lái)說(shuō),時(shí)間處理是非常繁瑣的。從Java 8開(kāi)始有了新的時(shí)間API、時(shí)間的處理更加優(yōu)雅,不再需要借助三方類(lèi)庫(kù),而且線(xiàn)程安全。今天來(lái)梳理一下新API的格式化,而且還要玩點(diǎn)你沒(méi)玩過(guò)的東西,點(diǎn)贊、轉(zhuǎn)發(fā)、再看走起來(lái)。
新API的時(shí)間格式化
新的時(shí)間API的時(shí)間格式化由java.time.format.DateTimeFormatter負(fù)責(zé)。
本地化時(shí)間
結(jié)合枚舉FormatStyle定義的風(fēng)格,DateTimeFormatter預(yù)定義了基于本地(Locale)風(fēng)格的時(shí)間格式。我們來(lái)看這段代碼:
- String format = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM)
- .format(ZonedDateTime.now());
如果你在中國(guó),格式化結(jié)果:
- 2022年1月6日 下午4:22:01
如果你在美國(guó):
- Jan 6, 2022, 4:21:10 PM
有三個(gè)靜態(tài)方法及其重載來(lái)格式化本地化時(shí)間,具體已經(jīng)整理成了思維導(dǎo)圖:
本地化日期時(shí)間的處理
ISO/RFC規(guī)范格式
DateTimeFormatter還內(nèi)置了ISO和RFC的時(shí)間格式,基于內(nèi)置的DateTimeFormatter靜態(tài)實(shí)例。舉個(gè)例子:
- // 靜態(tài)實(shí)例
- DateTimeFormatter isoWeekDateFormatter = DateTimeFormatter.ISO_WEEK_DATE;
- // 執(zhí)行格式化
- String format = isoWeekDateFormatter.format(LocalDateTime.now());
- // format = 2022-W01-4
- System.out.println("format = " + format);
其它的如下表格所示:
內(nèi)置ISO、RFC規(guī)范格式
范式格式化
這種方式應(yīng)該是我們最常用的方式了。通過(guò)字母和符號(hào)來(lái)構(gòu)建一個(gè)范式(Patterns),使用ofPattern(String)或者ofPattern(String, Locale)方法傳遞構(gòu)建的范式。例如,d MMM uuuu將把2011-12-03格式化為2011年12月3日。從一個(gè)模式中創(chuàng)建的格式可以根據(jù)需要多次使用,它是不可改變的,并且是線(xiàn)程安全的。
相信什么yyyy-MM-dd HH:mm:ss你都玩膩了,胖哥給你看點(diǎn)你沒(méi)見(jiàn)過(guò)的:
- // 最后面是兩個(gè)V 不是W 單個(gè)V會(huì)報(bào)錯(cuò)
- 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
表格給你整理好了,自己試一試:
格式化符號(hào)對(duì)照表