與眾不同的 Java 日期格式化大全
前言
在 Java 中,經(jīng)常要將時(shí)間字符串轉(zhuǎn)換為日期,或者要將日期轉(zhuǎn)換為時(shí)間字符串。這種操作一般都是用 java.text.SimpleDateFormat 類處理。例如要將日期轉(zhuǎn)換為時(shí)間字符串,那么就用下面的代碼。
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())
得到的結(jié)果是
2018-11-25 17:57:40
其中 "yyyy-MM-dd HH:mm:ss" 這部分叫做時(shí)間模式,是由一些固定的字符組合來(lái)指定的。java.text.SimpleDateFormat 可以根據(jù)這個(gè)模式調(diào)用 format 方法把時(shí)間對(duì)象格式化為符合模式的字符串,也可以根據(jù)這個(gè)模式調(diào)用 parse 來(lái)把一個(gè)符合模式的字符串解析為時(shí)間對(duì)象。但是一直以來(lái),這個(gè)用法都不太系統(tǒng),所以對(duì)他的用法總結(jié)一下,希望對(duì)大家有幫助。
java.text.SimpleDateFormat 模式字符串
下表是 支持的時(shí)間模式的字符串
字符 | 含義 |
---|---|
G | 年代標(biāo)志符 |
y | 年 |
M | 月 |
d | 日 |
h | 時(shí)在上午或下午(1~12) |
H | 時(shí)在一天中(0~23) |
m | 分 |
s | 秒 |
S | 毫秒 |
E | 星期 |
D | 一年中的第幾天 |
F | 一月中第幾個(gè)星期幾 |
w | 一年中第幾個(gè)星期 |
W | 一月中第幾個(gè)星期 |
a | 上午/下午標(biāo)記符 |
k | 時(shí)在一天中(1~24) |
K | 時(shí)在上午或下午(0~11) |
z | 時(shí)區(qū) |
給出一個(gè)較完整的例子如下
System.out.println( new SimpleDateFormat("G y-M-d Z E H:m:s:S a").format(new Date()) );
輸出結(jié)果為
公元 2018-11-26 +0800 星期一 18:3:42:236 下午
其中“公元”是年代,“ 2018-11-26”是格式化的年月日,“+0800” 是當(dāng)前時(shí)區(qū)設(shè)置,“星期一”是星期,“17:32:11:099”是帶毫秒的時(shí)間,“下午”是上下午標(biāo)志。
java.text.SimpleDateFormat 模式擴(kuò)展用法
上一章節(jié)的表格顯示的是 java.text.SimpleDateFormat 模式的最基礎(chǔ)的字符模式。這些模式實(shí)際上是可以有擴(kuò)展的使用方法的。
字符 | 含義 |
---|---|
MM | 二位數(shù)字顯示月份。位數(shù)不夠前面補(bǔ) 0 |
MMM | 用月份名稱簡(jiǎn)寫(xiě)顯示月份,例如 Nov |
MMMMM | 用月份名稱全稱顯示月份,例如 November |
HH | 二位數(shù)字顯示 24 小時(shí)制的小時(shí),位數(shù)不夠前面補(bǔ) 0 |
hh | 二位數(shù)字顯示 12 小時(shí)制的小時(shí) ,位數(shù)不夠前面補(bǔ) 0 |
mm | 二位數(shù)字顯示分鐘,位數(shù)不夠前面補(bǔ) 0 |
hh | 二位數(shù)字顯示秒 ,位數(shù)不夠前面補(bǔ) 0 |
sss | 三位數(shù)字顯毫秒,位數(shù)不夠前面補(bǔ) 0 |
非字母字符 | 例如-/*&^%()數(shù)字等,直接填充字符串位置 |
'' | 常量字符,在兩個(gè)'符號(hào)之間的字符串會(huì)被當(dāng)做常量直接顯示 |
System.out.println( new SimpleDateFormat("G y-MM-dd Z E HH:mm:ss:SSS a").format(new Date()) );
輸出結(jié)果為
公元 2018-11-26 +0800 星期一 18:24:05:052 下午
System.out.println( new SimpleDateFormat("yyyy-MMMMM-|/)(&*^%$#@!,.-+12dd HH:mm:ss").format(new Date()) );
輸出結(jié)果為
2018-十一月-|/)(&*^%$#@!,.-+1226 20:15:13
如果我們要輸出一些固定的含字母的字符串,則可以用下面的代碼
System.out.println( new SimpleDateFormat("'ygc time :'G y-MM-dd Z E HH:mm:ss:SSS a") .format(new Date()) );
輸出結(jié)果為:
ygc time :公元 2018-11-26 +0800 星期一 21:01:13:076 下午
時(shí)間格式語(yǔ)言設(shè)置
對(duì)于一些數(shù)據(jù)的顯示,語(yǔ)言設(shè)置會(huì)影響她的表現(xiàn)。例如年代、月份、星期、上下午標(biāo)識(shí)。
首先我們看看當(dāng)前的 Java 支持哪些語(yǔ)言
Map<String, String> languages = new LinkedHashMap<>(); for (Locale locale : Locale.getAvailableLocales()) { languages.put(locale.getLanguage(), locale.getDisplayLanguage()); } for (String key : languages.keySet()) { System.out.println(key + ":" + languages.get(key)); }
得到結(jié)果
ar:阿拉伯文 hr:克羅地亞文 fr:法文 es:西班牙文 mt:馬耳他文 bg:保加利亞文 zh:中文 it:意大利文 ko:朝鮮文 uk:烏克蘭文 lv:拉托維亞文(列托) da:丹麥文 vi:越南文 en:英文 sr:塞爾維亞文 sv:瑞典文 pt:葡萄牙文 sk:斯洛伐克文 hi:印地文 ga:愛(ài)爾蘭文 fi:芬蘭文 et:愛(ài)沙尼亞文 cs:捷克文 el:希臘文 hu:匈牙利文 in:印度尼西亞文 ja:日文 be:白俄羅斯文 is:冰島文 pl:波蘭文 tr:土耳其文 ca:加泰羅尼亞文 ms:馬來(lái)文 lt:立陶宛文 sq:阿爾巴尼亞文 de:德文 ro:羅馬尼亞文 sl:斯洛文尼亞文 ru:俄文 no:挪威文 th:泰文 mk:馬其頓文 iw:希伯來(lái)文 nl:荷蘭文
在代碼中通過(guò)指定 java.text.SimpleDateFormat 構(gòu)造函數(shù)中的 java.util.Locale 對(duì)象來(lái)指定語(yǔ)言選項(xiàng),然后用不同語(yǔ)言來(lái)格式化時(shí)間。
編寫(xiě)代碼輸出每種語(yǔ)言的時(shí)間字符串如下所示
Map<String, String> languages = new LinkedHashMap<>(); for (Locale locale : Locale.getAvailableLocales()) { languages.put(locale.getLanguage(), locale.getDisplayLanguage()); } for (String key : languages.keySet()) { if (key.length() > 0) { System.out.println(languages.get(key)); System.out.println( new SimpleDateFormat("G y-MMMMM-dd Z E HH:mm:ss:SSS a", new Locale(key)) .format(new Date()) ); } }
得到如下的結(jié)果:
阿拉伯文 م 2018-نوفمبر-26 +0800 ن 20:55:37:457 م 克羅地亞文 Poslije Krista 2018-studenoga-26 +0800 pon 20:55:37:463 PM 法文 ap. J.-C. 2018-novembre-26 +0800 lun. 20:55:37:465 PM 西班牙文 anno Dómini 2018-noviembre-26 +0800 lun 20:55:37:468 PM 馬耳他文 WK 2018-Novembru-26 +0800 Tne 20:55:37:471 WN 保加利亞文 н.е. 2018-Ноември-26 +0800 Пн 20:55:37:474 PM 中文 公元 2018-十一月-26 +0800 星期一 20:55:37:484 下午 意大利文 dopo Cristo 2018-novembre-26 +0800 lun 20:55:37:488 PM 朝鮮文 서기 2018-11월-26 +0800 월 20:55:37:491 오후 烏克蘭文 після н.е. 2018-листопада-26 +0800 пн 20:55:37:503 PM 拉托維亞文(列托) mē 2018-novembris-26 +0800 P 20:55:37:505 PM 丹麥文 e.Kr. 2018-november-26 +0800 ma 20:55:37:508 PM 越南文 sau CN 2018-tháng mười một-26 +0800 Th 2 20:55:37:518 CH 英文 AD 2018-November-26 +0800 Mon 20:55:37:520 PM 塞爾維亞文 н. е 2018-новембар-26 +0800 пон 20:55:37:523 PM 瑞典文 efter Kristus 2018-november-26 +0800 må 20:55:37:526 em 葡萄牙文 d.C. 2018-Novembro-26 +0800 Seg 20:55:37:528 PM 斯洛伐克文 n.l. 2018-novembra-26 +0800 Po 20:55:37:530 PM 印地文 AD 2018-November-26 +0800 Mon 20:55:37:533 PM 愛(ài)爾蘭文 AD 2018-Samhain-26 +0800 Luan 20:55:37:534 p.m. 芬蘭文 jKr. 2018-marraskuuta-26 +0800 ma 20:55:37:536 ip. 愛(ài)沙尼亞文 m.a.j. 2018-november-26 +0800 E 20:55:37:547 PM 捷克文 po Kr. 2018-listopadu-26 +0800 Po 20:55:37:550 odp. 希臘文 AD 2018-Νοεμβρίου-26 +0800 Δευ 20:55:37:556 μμ 匈牙利文 i.u. 2018-november-26 +0800 H 20:55:37:563 DU 印度尼西亞文 CE 2018-November-26 +0800 Sen 20:55:37:565 PM 日文 西暦 2018-11月-26 +0800 月 20:55:37:569 午後 白俄羅斯文 н.е. 2018-лістапада-26 +0800 пн 20:55:37:571 PM 冰島文 AD 2018-nóvember-26 +0800 mán. 20:55:37:576 PM 波蘭文 n.e. 2018-listopada-26 +0800 Pn 20:55:37:579 PM 土耳其文 MS 2018-Kasım-26 +0800 Pzt 20:55:37:581 PM 加泰羅尼亞文 AD 2018-de novembre-26 +0800 dl. 20:55:37:583 PM 馬來(lái)文 CE 2018-November-26 +0800 Isn 20:55:37:586 PM 立陶宛文 po.Kr. 2018-lapkritis-26 +0800 Pr 20:55:37:611 PM 阿爾巴尼亞文 n.e.r. 2018-nëntor-26 +0800 Hën 20:55:37:613 MD 德文 n. Chr. 2018-November-26 +0800 Mo 20:55:37:616 PM 羅馬尼亞文 î.d.C. 2018-noiembrie-26 +0800 L 20:55:37:618 PM 斯洛文尼亞文 po Kr. 2018-november-26 +0800 Pon 20:55:37:620 PM 俄文 н.э. 2018-ноября-26 +0800 Пн 20:55:37:622 PM 挪威文 AD 2018-november-26 +0800 ma 20:55:37:626 PM 泰文 ค.ศ. 2018-พฤศจิกายน-26 +0800 จ. 20:55:37:628 หลังเที่ยง 馬其頓文 ае. 2018-ноември-26 +0800 пон. 20:55:37:630 PM 希伯來(lái)文 לפסה"נ 2018-נובמבר-26 +0800 ב 20:55:37:645 PM 荷蘭文 n. Chr. 2018-november-26 +0800 ma 20:55:37:651 PM
如果用月份簡(jiǎn)寫(xiě)來(lái)輸出的代碼如下
Map<String, String> languages = new LinkedHashMap<>(); for (Locale locale : Locale.getAvailableLocales()) { languages.put(locale.getLanguage(), locale.getDisplayLanguage()); } for (String key : languages.keySet()) { if (key.length() > 0) { System.out.println(languages.get(key)); System.out.println( new SimpleDateFormat("G y-MMM-dd Z E HH:mm:ss:SSS a", new Locale(key)) .format(new Date()) ); } }
阿拉伯文 م 2018-نوف-26 +0800 ن 20:58:06:797 م 克羅地亞文 Poslije Krista 2018-stu-26 +0800 pon 20:58:06:803 PM 法文 ap. J.-C. 2018-nov.-26 +0800 lun. 20:58:06:806 PM 西班牙文 anno Dómini 2018-nov-26 +0800 lun 20:58:06:809 PM 馬耳他文 WK 2018-Nov-26 +0800 Tne 20:58:06:812 WN 保加利亞文 н.е. 2018-XI-26 +0800 Пн 20:58:06:815 PM 中文 公元 2018-十一月-26 +0800 星期一 20:58:06:823 下午 意大利文 dopo Cristo 2018-nov-26 +0800 lun 20:58:06:826 PM 朝鮮文 서기 2018-11월-26 +0800 월 20:58:06:835 오후 烏克蘭文 після н.е. 2018-лист.-26 +0800 пн 20:58:06:848 PM 拉托維亞文(列托) mē 2018-nov.-26 +0800 P 20:58:06:851 PM 丹麥文 e.Kr. 2018-nov.-26 +0800 ma 20:58:06:853 PM 越南文 sau CN 2018-thg 11-26 +0800 Th 2 20:58:06:864 CH 英文 AD 2018-Nov-26 +0800 Mon 20:58:06:865 PM 塞爾維亞文 н. е 2018-нов-26 +0800 пон 20:58:06:868 PM 瑞典文 efter Kristus 2018-nov-26 +0800 må 20:58:06:875 em 葡萄牙文 d.C. 2018-nov-26 +0800 Seg 20:58:06:888 PM 斯洛伐克文 n.l. 2018-nov-26 +0800 Po 20:58:06:902 PM 印地文 AD 2018-Nov-26 +0800 Mon 20:58:06:912 PM 愛(ài)爾蘭文 AD 2018-Samh-26 +0800 Luan 20:58:06:916 p.m. 芬蘭文 jKr. 2018-marraskuuta-26 +0800 ma 20:58:06:920 ip. 愛(ài)沙尼亞文 m.a.j. 2018-nov-26 +0800 E 20:58:06:932 PM 捷克文 po Kr. 2018-Lis-26 +0800 Po 20:58:06:950 odp. 希臘文 AD 2018-Νοε-26 +0800 Δευ 20:58:06:953 μμ 匈牙利文 i.u. 2018-nov.-26 +0800 H 20:58:06:973 DU 印度尼西亞文 CE 2018-Nov-26 +0800 Sen 20:58:06:976 PM 日文 西暦 2018-11-26 +0800 月 20:58:06:982 午後 白俄羅斯文 н.е. 2018-ліс-26 +0800 пн 20:58:06:985 PM 冰島文 AD 2018-nóv.-26 +0800 mán. 20:58:06:988 PM 波蘭文 n.e. 2018-lis-26 +0800 Pn 20:58:06:991 PM 土耳其文 MS 2018-Kas-26 +0800 Pzt 20:58:06:998 PM 加泰羅尼亞文 AD 2018-de nov.-26 +0800 dl. 20:58:07:007 PM 馬來(lái)文 CE 2018-Nov-26 +0800 Isn 20:58:07:009 PM 立陶宛文 po.Kr. 2018-Lap-26 +0800 Pr 20:58:07:065 PM 阿爾巴尼亞文 n.e.r. 2018-Nën-26 +0800 Hën 20:58:07:069 MD 德文 n. Chr. 2018-Nov-26 +0800 Mo 20:58:07:073 PM 羅馬尼亞文 î.d.C. 2018-Nov-26 +0800 L 20:58:07:077 PM 斯洛文尼亞文 po Kr. 2018-nov.-26 +0800 Pon 20:58:07:080 PM 俄文 н.э. 2018-ноя-26 +0800 Пн 20:58:07:083 PM 挪威文 AD 2018-nov-26 +0800 ma 20:58:07:088 PM 泰文 ค.ศ. 2018-พ.ย.-26 +0800 จ. 20:58:07:091 หลังเที่ยง 馬其頓文 ае. 2018-ноем.-26 +0800 пон. 20:58:07:094 PM 希伯來(lái)文 לפסה"נ 2018-נוב-26 +0800 ב 20:58:07:097 PM 荷蘭文 n. Chr. 2018-nov-26 +0800 ma 20:58:07:100 PM
還有其他的一些用法,大家可以繼續(xù)去探索。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Java日期格式化如何避免YYYY引發(fā)的時(shí)間異常
- Java技能點(diǎn)之SimpleDateFormat進(jìn)行日期格式化問(wèn)題
- java日期格式化YYYY-MM-dd遇坑指南小結(jié)
- Java中joda日期格式化工具的使用示例
- java中日期格式化的大坑
- Golang中使用Date進(jìn)行日期格式化(沿用Java風(fēng)格)
- Java中日期格式化YYYY-DD的操作bug
- java日期格式化SimpleDateFormat的使用詳解
- java正則實(shí)現(xiàn)各種日期格式化
- Java日期格式化的實(shí)現(xiàn)(@JsonFormat和@JSONField)
相關(guān)文章
String.intern()作用與常量池關(guān)系示例解析
這篇文章主要為大家介紹了String.intern()作用與常量池關(guān)系示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08啟用springboot security后登錄web頁(yè)面需要用戶名和密碼的解決方法
這篇文章主要介紹了啟用springboot security后登錄web頁(yè)面需要用戶名和密碼的解決方法,也就是使用默認(rèn)用戶和密碼登錄的操作方法,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-02-02