Java DateTimeFormatter类使用简介
在 Java 中,DateTimeFormatter是 Java 8 + 引入的线程安全日期时间格式化工具,用于解析(字符串→日期)和格式化(日期→字符串)操作,以下是核心用法:
一、基本使用步骤
创建格式化器:通过ofPattern()指定格式模式,结合Locale控制语言。
格式化日期:调用日期对象(如LocalDate/LocalDateTime)的format()方法。
解析字符串:调用DateTimeFormatter的parse()方法,转换为日期对象。
二、常用示例
1. 格式化日期 / 时间
import java.time.*; import java.time.format.DateTimeFormatter; import java.util.Locale; public class DateTimeFormatterDemo { public static void main(String[] args) { // 1. 创建格式化器(格式模式+区域设置) // 模式说明:yyyy-年,MM-月,dd-日,HH-24小时,mm-分,ss-秒,EEEE-星期全称 DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "yyyy年MM月dd日 HH:mm:ss EEEE", Locale.SIMPLIFIED_CHINESE // 简体中文 ); // 2. 格式化当前日期时间 LocalDateTime now = LocalDateTime.now(); String formattedNow = now.format(formatter); System.out.println("格式化结果:" + formattedNow); // 示例:2025年12月25日 15:30:20 星期四 } }
2. 解析字符串为日期对象
// 解析字符串为LocalDate String dateStr = "2025-12-25"; DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); LocalDate date = LocalDate.parse(dateStr, dateFormatter); System.out.println("解析后的日期:" + date); // 输出:2025-12-25 // 解析字符串为LocalDateTime String dateTimeStr = "2025-12-25 18:00:00"; DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); LocalDateTime dateTime = LocalDateTime.parse(dateTimeStr, dateTimeFormatter); System.out.println("解析后的日期时间:" + dateTime); // 输出:2025-12-25T18:00
三、关键注意事项
模式字母:常用模式(区分大小写):
y:年(如yyyy→2025);M:月(如MM→12);d:日(如dd→25)
H:24 小时制(如HH→18);h:12 小时制(如hh→06)
m:分;s:秒;S:毫秒;E:星期(如EEEE→星期四)
线程安全:DateTimeFormatter是不可变类,可在多线程环境直接共享。
区域设置:通过Locale(如Locale.US)控制日期的语言(如星期显示为 “Thursday”)。
四、预定义格式化器
JDK 提供了常用的预定义格式化器,无需自定义模式:
// 标准ISO日期格式(yyyy-MM-dd) LocalDate date = LocalDate.parse("2025-12-25", DateTimeFormatter.ISO_LOCAL_DATE); // 标准ISO日期时间格式(yyyy-MM-dd'T'HH:mm:ss) LocalDateTime dateTime = LocalDateTime.parse("2025-12-25T18:00:00", DateTimeFormatter.ISO_LOCAL_DATE_TIME);
四、DateTimeFormatter类的常用格式模式
1、核心格式模式字母对照表(区分大小写)
模式字母 含义 示例(基于时间:2025-12-25 18:30:45.123 星期四) y 年(位数可自定义) yyyy → 2025;yy → 25 M 月(数字 / 文本) MM → 12;M → 12;MMM → 十二月(中文) d 日(月份中的天数) dd → 25;d → 25 H 小时(24 小时制) HH → 18;H → 18 h 小时(12 小时制) hh → 06;h → 6 m 分钟 mm → 30;m → 30 s 秒 ss → 45;s → 45 S 毫秒(最多 3 位) SSS → 123;SS → 12;S → 1 E 星期(文本) EEEE → 星期四;E → 四 a 上午 / 下午(12 小时制) a → 下午(中文);AM/PM(英文) D 一年中的天数 DDD → 359(2025 年第 359 天) w 一年中的周数 ww → 52(2025 年第 52 周)
2、
常用组合模式示例
下面是开发中高频使用的格式组合,可直接复制使用:
import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.Locale; public class CommonPatterns { public static void main(String[] args) { LocalDateTime now = LocalDateTime.of(2025, 12, 25, 18, 30, 45, 123000000); Locale zhLocale = Locale.SIMPLIFIED_CHINESE; // 1. 仅日期(常用):2025-12-25 DateTimeFormatter pattern1 = DateTimeFormatter.ofPattern("yyyy-MM-dd"); System.out.println("模式1:" + now.format(pattern1)); // 2. 日期+24小时制时间:2025-12-25 18:30:45 DateTimeFormatter pattern2 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); System.out.println("模式2:" + now.format(pattern2)); // 3. 中文格式日期+星期:2025年12月25日 星期四 DateTimeFormatter pattern3 = DateTimeFormatter.ofPattern("yyyy年MM月dd日 EEEE", zhLocale); System.out.println("模式3:" + now.format(pattern3)); // 4. 12小时制时间(带上午/下午):2025-12-25 06:30:45 下午 DateTimeFormatter pattern4 = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss a", zhLocale); System.out.println("模式4:" + now.format(pattern4)); // 5. 含毫秒的完整时间:2025-12-25 18:30:45.123 DateTimeFormatter pattern5 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"); System.out.println("模式5:" + now.format(pattern5)); // 6. 简洁中文格式:2025/12/25 下午6:30 DateTimeFormatter pattern6 = DateTimeFormatter.ofPattern("yyyy/MM/dd a h:mm", zhLocale); System.out.println("模式6:" + now.format(pattern6)); } }
总结
DateTimeFormatter的模式字母区分大小写,核心区分:H(24 小时)/h(12 小时)、M(月)/m(分)、S(毫秒)/s(秒)。
中文显示星期 / 月份需搭配Locale.SIMPLIFIED_CHINESE,否则会显示英文(如Thursday)。
开发中优先使用组合模式(如yyyy-MM-dd HH:mm:ss),覆盖大部分日期时间格式化场景。

浙公网安备 33010602011771号