DateFormat 是格式化和解析「日期/時間」的抽象類,支援 4 種預設風格:SHORT、MEDIUM、LONG、FULL。實際上它是 SimpleDateFormat 的父類,獲取實例時返回的就是 SimpleDateFormat 物件。SimpleDateFormat 才是格式化日期的核心類,允許自定義模式。
getTimeInstance():僅時間getDateInstance():僅日期getDateTimeInstance():日期+時間----getTimeInstance ---- (1.0) Empty Param : 下午4:54:22 (2.1) One Param(s) : 下午4:54 (2.2) One Param(m) : 下午4:54:22 (2.3) One Param(l) : 下午04時54分22秒 (2.4) One Param(f) : 下午04時54分22秒 CST ----getDateInstance ---- (1.0) Empty Param : 2014-1-23 (2.1) One Param(s) : 14-1-23 (2.2) One Param(m) : 2014-1-23 (2.3) One Param(l) : 2014年1月23日 (2.4) One Param(f) : 2014年1月23日 星期四 ----getDateTimeInstance ---- (1.0) Empty Param : 2014-1-23 下午4:54:23 (3.4) One Param(f,l): 2014年1月23日 星期四 下午04時54分23秒 CST
| 字母 | 日期/時間元素 | 表示 | 示例 |
|---|---|---|---|
| G | Era 標記 | Text | AD |
| y | 年 | Year | 1996; 96 |
| M | 月份 | Month | July; Jul; 07 |
| w | 年內週數 | Number | 27 |
| W | 月內週數 | Number | 2 |
| D | 年內天數 | Number | 189 |
| d | 月內天數 | Number | 10 |
| F | 月內星期 | Number | 2 |
| E | 星期名稱 | Text | Tuesday; Tue |
| a | AM/PM 標記 | Text | PM |
| H | 小時 (0-23) | Number | 0 |
| k | 小時 (1-24) | Number | 24 |
| K | 小時 (0-11, AM/PM) | Number | 0 |
| h | 小時 (1-12, AM/PM) | Number | 12 |
| m | 分鐘 | Number | 30 |
| s | 秒 | Number | 55 |
| S | 毫秒 | Number | 978 |
| z | 時區名稱 | General time zone | Pacific Standard Time; PST; GMT-08:00 |
| Z | 時區 RFC 822 | RFC 822 time zone | -0800 |
模式字母重複次數規則:Text 型 ≥4 用完整形式,否則縮寫;Number 型數字為最小位數,不足補 0;Year 型 2 位截取,否則完整年份。
HH:mm 14:22 h:mm a 2:22 下午 HH:mm z 14:22 CST HH:mm Z 14:22 +0800 HH:mm zzzz 14:22 中國標準時間 yyyy-MM-dd 2013-09-19 yyyy-MM-dd HH:mm:ss 2013-09-19 14:22:30 yyyy-MM-dd HH:mm:ss.SSSZ 2013-09-19 14:22:30.000+0800 yyyy-MM-dd'T'HH:mm:ss.SSSZ 2013-09-19T14:22:30.000+0800 EEEE yyyy-MM-dd HH:mm:ss zzzz 星期四 2013-09-19 14:22:30 中國標準時間
SimpleDateFormat 非線程安全,建議每個線程建立獨立實例,或使用 ThreadLocal 包裝。java.time.format.DateTimeFormatter(不可變、線程安全)。