Java 中日期時間格式化使用特定的模式字符串來定義輸出格式。以下是常見的格式化符號及其含義,適用于?SimpleDateFormat
?和?DateTimeFormatter
一、日期部分格式化符號
符號 | 含義 | 示例 |
---|
y | 年 (Year) | yyyy → 2023 |
M | 月 (Month) | MM → 09, MMM → Sep, MMMM → September |
d | 月中的日 (Day of month) | dd → 05, d → 5 |
D | 年中的日 (Day of year) | D → 256 (第256天) |
E | 星期幾 (Day of week) | E → Mon, EEEE → Monday |
F | 月中的第幾個星期幾 | F → 1 (每月的第一個星期四) |
w | 年中的周 (Week of year) | w → 38 (第38周) |
W | 月中的周 (Week of month) | W → 3 (第3周) |
二、時間部分格式化符號
符號 | 含義 | 示例 |
---|
H | 小時 (0-23) | HH → 08 |
k | 小時 (1-24) | k → 24 |
K | 小時 (0-11, AM/PM) | KK → 08 |
h | 小時 (1-12, AM/PM) | hh → 08 |
m | 分鐘 (Minute) | mm → 30 |
s | 秒 (Second) | ss → 45 |
S | 毫秒 (Millisecond) | SSS → 789 |
n | 納秒 (Nanosecond) | n → 123456789 |
a | AM/PM 標記 | a → AM |
三、時區格式化符號
符號 | 含義 | 示例 |
---|
z | 時區名稱 | z → CST, zzzz → China Standard Time |
Z | 時區偏移量 | Z → +0800, XXX → +08:00 |
O | 本地化時區偏移 | O → GMT+8 |
X | ISO 8601 時區 | X → +08, XX → +0800, XXX → +08:00 |
四、常見格式示例
1. 基本日期時間格式
yyyy-MM-dd
?→ 2023-09-15
MM/dd/yyyy
?→ 09/15/2023
dd-MMM-yyyy
?→ 15-Sep-2023
yyyy-MM-dd HH:mm:ss
?→ 2023-09-15 14:30:45
yyyy-MM-dd HH:mm:ss.SSS
?→ 2023-09-15 14:30:45.789
2. 帶時區的格式
yyyy-MM-dd HH:mm:ss Z
?→ 2023-09-15 14:30:45 +0800
yyyy-MM-dd HH:mm:ss XXX
?→ 2023-09-15 14:30:45 +08:00
yyyy-MM-dd'T'HH:mm:ss.SSSZ
?→ 2023-09-15T14:30:45.789+0800 (ISO 8601)
3. 可讀性強的格式
EEEE, MMMM d, yyyy
?→ Friday, September 15, 2023
hh:mm a
?→ 02:30 PM
h:mm a, zzzz
?→ 2:30 PM, China Standard Time
五、使用示例
SimpleDateFormat (傳統API)
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String formatted = sdf.format(new Date());
// 輸出: 2023-09-15 14:30:45
DateTimeFormatter (Java 8+)
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formatted = LocalDateTime.now().format(formatter);
// 輸出: 2023-09-15 14:30:45
ISO 8601 格式
Instant.now().toString(); // 自動使用ISO 8601格式
// 輸出: 2023-09-15T06:30:45.789Z
六、特殊字符處理
DateTimeFormatter.ofPattern("yyyy-MM-dd 'at' HH:mm:ss");
// 輸出: 2023-09-15 at 14:30:45
七、本地化格式
// Java 8 方式
DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG).withLocale(Locale.CHINA);
// 輸出: 2023年9月15日 下午02時30分45秒 (中文環境)