此博客作爲使用Date Formate時,對於Pattern的格式填坑。僅做參考
String轉Date或者Date轉String的時候都會使用到"yyyyMMdd HH:mm:ss"類似的模板。
先介紹一下 G 年代標誌符
y 年
M 月
d 日
h 時 在上午或下午 (1~12)
H 時 在一天中 (0~23)
m 分
s 秒
S 毫秒
E 星期
D 一年中的第幾天
F 一月中第幾個星期幾
w 一年中第幾個星期
W 一月中第幾個星期
a 上午 / 下午 標記符
k 時 在一天中 (1~24)
K 時 在上午或下午 (0~11)
z 時區
進行Date、String 相互轉換時,Pattern是不能亂用,應該參考G年代標誌符,否則會出現意想不到的錯誤輸出,或者程序出現異常,下面介紹幾個例子說明:
private final SimpleDateFormat format = new SimpleDateFormate();
範例1:
Date now = new Date();
String pattern = "yyyyMMdd HH:mm:ss";
format.applyPattern(pattern);
String nowStr = format.format(now);
system.out.println(nowStr);
輸出
20190625 13:00:00
是一個正確的字符串輸出。
範例2
如果將 pattern 改爲 "YYYYMMDD HH:MM:SS",輸出又是怎樣?
// String pattern = "yyyyMMdd HH:mm:ss";
String pattern = "YYYYMMDD HH:MM:SS";
輸出
正如你所料:程序出現異常
Exception in thread "main" java.lang.IllegalArgumentException: Illegal pattern character 'Y'
參考G 年代標誌符,沒有Y這樣的說明。
範例3
如果將 pattern 改爲 "yyyyMMDD HH:MM:SS",輸出又是怎樣?
// String pattern = "yyyyMMdd HH:mm:ss";
String pattern = "yyyyMMDD HH:MM:SS";
輸出:
20190125 13:01:00
是一個不正確的輸出。
範例4
如果將 pattern 改爲 "yyyyMMdd hh:mm:ss",輸出又是怎樣?
// String pattern = "yyyyMMdd HH:mm:ss";
String pattern = "yyyyMMdd hh:mm:ss";
輸出:
20190625 01:00:00
這裏出現的時間是12小時制的,不能說不正確,需要根據需求來定義是否正確。
總結:格式化日期輸出或者字符串格式化爲指定的日期時,應該選擇正確的格式化的模板,否則會出現意想不到的輸出或者程序出現錯誤。在程序出現錯誤時,能最明顯的觀察到格式化日期出了問題。但如果是出現了意想不到的日期時間輸出,卻沒有發現,就會造成程序的隱藏八阿哥。