記於19年12月31日,支付報日期不在有效範圍內,查看日誌發現顯示的時間爲2020年12月31日。
//使用Date
Date d = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("當前時間:" + sdf.format(d));
字母 | 含義 | 示例 |
---|---|---|
y | 年份。一般用 yy 表示兩位年份,yyyy 表示 4 位年份 | 使用 yy 表示的年扮,如 11; 使用 yyyy 表示的年份,如 2011 |
M | 月份。一般用 MM 表示月份,如果使用 MMM,則會 根據語言環境顯示不同語言的月份 |
使用 MM 表示的月份,如 05; 使用 MMM 表示月份,在 Locale.CHINA 語言環境下,如“十月”;在 Locale.US 語言環境下,如 Oct |
d | 月份中的天數。一般用 dd 表示天數 | 使用 dd 表示的天數,如 10 |
D | 年份中的天數。表示當天是當年的第幾天, 用 D 表示 | 使用 D 表示的年份中的天數,如 295 |
E | 星期幾。用 E 表示,會根據語言環境的不同, 顯示不 同語言的星期幾 |
使用 E 表示星期幾,在 Locale.CHINA 語 言環境下,如“星期四”;在 Locale.US 語 言環境下,如 Thu |
H | 一天中的小時數(0~23)。一般用 HH 表示小時數 | 使用 HH 表示的小時數,如 18 |
h | 一天中的小時數(1~12)。一般使用 hh 表示小時數 | 使用 hh 表示的小時數,如 10 (注意 10 有 可能是 10 點,也可能是 22 點) |
m | 分鐘數。一般使用 mm 表示分鐘數 | 使用 mm 表示的分鐘數,如 29 |
s | 秒數。一般使用 ss 表示秒數 | 使用 ss 表示的秒數,如 38 |
S | 毫秒數。一般使用 SSS 表示毫秒數 | 使用 SSS 表示的毫秒數,如 156 |
而我使用的大寫的YYYY,導致年前的時間錯了一年。
YYYY,week-based year 是 ISO 8601 規定的,19年12月30日這一週已經算是2020年了,29日還是19年,而使用小寫的yyyy不會出現這種情況,當然dd和DD也有區別。