Java 中常用的日期和时间格式化转换符大全
Java 中日期和时间的格式化主要通过以下两个类实现:
- 旧 API(Java 8 之前):
java.text.SimpleDateFormat - 新 API(Java 8+ 推荐):
java.time.format.DateTimeFormatter
两者使用的格式化转换符(pattern letters)基本相同,下面是常用转换符的详细表格。
常用转换符表格(按字母排序)
| 转换符 | 含义 | 示例输出(假设日期:2026-01-06 14:30:25,周二) | 说明 |
|---|---|---|---|
| G | 纪元(Era) | AD | 公元前/后 |
| y | 年(年份) | 2026(yy → 26) | yy 为两位年份 |
| Y | 周所在年(Week year) | 2026 | 很少用 |
| M | 月份 | 01(MM) 1(M) January(MMMM) Jan(MMM) | M 个数决定显示方式 |
| L | 独立月份(Stand-alone month) | 与 M 类似,但用于某些语言的独立形式 | 很少用 |
| d | 月中天(Day of month) | 06(dd) 6(d) | |
| D | 年中天(Day of year) | 006 | 1月1日为001 |
| E | 星期(Day of week) | Tuesday(EEEE) Tue(EEE) | E 个数决定长短 |
| u | 周中天数字(1=周一) | 2 | ISO 标准 |
| a | 上/下午标记 | PM | |
| H | 24小时制小时(0-23) | 14 | |
| k | 24小时制小时(1-24) | 14 | |
| K | 12小时制小时(0-11) | 2 | |
| h | 12小时制小时(1-12) | 2 | |
| m | 分钟 | 30 | |
| s | 秒 | 25 | |
| S | 毫秒 | 000(SSS) 0(S) | S 个数决定位数 |
| z | 时区(通用) | GMT+08:00 | |
| Z | 时区(RFC 822) | +0800 | |
| X | 时区(ISO 8601) | +08 +0800(XX) Z(X) | 推荐使用 |
| ’ | 转义单引号 | 用于输出文字,如 yyyy’年’ | 单引号需成对 ‘’ |
常见格式化模式示例
| 模式 | 输出示例 | 说明 |
|---|---|---|
| yyyy-MM-dd | 2026-01-06 | 最常见的日期格式(ISO) |
| yyyy/MM/dd | 2026/01/06 | |
| yyyy年MM月dd日 | 2026年01月06日 | 中文常见 |
| yyyy-MM-dd HH:mm:ss | 2026-01-06 14:30:25 | 完整日期时间(24小时) |
| yyyy-MM-dd hh:mm:ss a | 2026-01-06 02:30:25 PM | 12小时带上下午 |
| EEEE yyyy-MM-dd | Tuesday 2026-01-06 | 带星期 |
| yyyy-MM-dd’T’HH:mm:ss | 2026-01-06T14:30:25 | ISO 8601 基本格式 |
| yyyy-MM-dd HH:mm:ss.SSS | 2026-01-06 14:30:25.000 | 带毫秒 |
| yyyy-MM-dd HH:mm:ss XXX | 2026-01-06 14:30:25 +08:00 | 带时区(推荐) |
使用示例
1. 使用 SimpleDateFormat(旧 API)
importjava.text.SimpleDateFormat;importjava.util.Date;Datedate=newDate();SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-dd HH:mm:ss");Stringstr=sdf.format(date);System.out.println(str);// 输出:2026-01-06 14:30:252. 使用 DateTimeFormatter(新 API,推荐)
importjava.time.LocalDateTime;importjava.time.format.DateTimeFormatter;LocalDateTimenow=LocalDateTime.now();DateTimeFormatterformatter=DateTimeFormatter.ofPattern("yyyy年MM月dd日 EEEE HH:mm");Stringstr=now.format(formatter);System.out.println(str);// 输出:2026年01月06日 星期二 14:30预定义格式(DateTimeFormatter 新 API 提供)
Java 8+ 的DateTimeFormatter还提供了常用预定义格式,无需手动写 pattern:
DateTimeFormatter.ISO_LOCAL_DATE// 2026-01-06DateTimeFormatter.ISO_LOCAL_TIME// 14:30:25DateTimeFormatter.ISO_LOCAL_DATE_TIME// 2026-01-06T14:30:25DateTimeFormatter.ISO_OFFSET_DATE_TIME// 2026-01-06T14:30:25+08:00DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL)// 带本地化星期等总结建议
- 日常开发优先使用
java.time包(LocalDateTime + DateTimeFormatter),线程安全、API 更清晰。 - 格式化字符串:最常用的是
yyyy-MM-dd HH:mm:ss。 - 时区处理:推荐使用
X或XXX显示时区,避免歧义。 - 中文场景:常用
yyyy年MM月dd日 HH:mm:ss。
掌握这些转换符,就能灵活处理 Java 中几乎所有日期时间格式化需求!