datetimeformatter 是 java 8 引入的线程安全、不可变的日期时间格式化类,支持预定义常量、自定义模式(如 yyyy-mm-dd)、中文本地化(需单引号包裹文字并指定 locale)以及时区格式化(如 xxx 表示 +08:00)。

Java 中 DateTimeFormatter 是 Java 8 引入的 java.time 包里用于格式化和解析日期时间的核心类,它线程安全、不可变,比旧的 SimpleDateFormat 更可靠、更易用。
使用预定义的常量格式器
对于常见格式,可以直接用 DateTimeFormatter 提供的静态常量,比如:
-
DateTimeFormatter.ISO_LOCAL_DATE→ 2024-05-20 -
DateTimeFormatter.ISO_LOCAL_DATE_TIME→ 2024-05-20T14:30:45 -
DateTimeFormatter.BASIC_ISO_DATE→ 20240520
用法示例:
LocalDateTime now = LocalDateTime.now(); String s = now.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME); // 输出:2024-05-20T14:30:45.123
用模式字符串自定义格式
通过 DateTimeFormatter.ofPattern("pattern") 指定自定义格式,常用符号有:
-
yyyy:四位年份(2024),yy表示两位(24) -
MM:两位月份(05),M表示不补零(5) -
dd:两位日期(20) -
HH:24 小时制小时(14),hh是 12 小时制(02) -
mm:分钟(30),ss:秒(45) -
SSS:毫秒(123) -
EEEE:完整星期名(Monday),EE是缩写(Mon) -
MMM:英文月份缩写(May),MMMM是全称(May)
示例:
LocalDateTime now = LocalDateTime.now();
DateTimeFormatter f = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
String s = now.format(f); // 如:2024-05-20 14:30:45.123
处理中文/本地化格式(如“2024年5月20日”)
默认模式不支持中文文字,需用单引号包裹字面量,并指定 Locale(否则可能显示英文):
DateTimeFormatter f = DateTimeFormatter.ofPattern("yyyy年M月d日 HH:mm", Locale.CHINA);
String s = LocalDateTime.now().format(f); // 如:2024年5月20日 14:30
注意:中文字符必须用单引号引起来(如 '年'、'月'、'日'),否则会报错或解析异常。
格式化带时区的时间(ZonedDateTime / OffsetDateTime)
如果要格式化含时区信息的时间,推荐用 ZonedDateTime 或 OffsetDateTime,并配合带时区符号的 pattern:
-
xxx→ +08:00(ISO 8601 偏移) -
XX→ +08(无冒号) -
zzz→ China Standard Time
示例:
ZonedDateTime zdt = ZonedDateTime.now(ZoneId.of("Asia/Shanghai"));
DateTimeFormatter f = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS XXX");
String s = zdt.format(f); // 如:2024-05-20 14:30:45.123 +08:00Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











