localdate需配合datetimeformatter格式化或解析,不可用simpledateformat;支持iso预设格式、ofpattern自定义(如"yyyy年mm月dd日"),注意mm表示分钟不能用于localdate;datetimeformatter线程安全可静态复用。

LocalDate 本身不支持直接格式化输出,它需要配合 DateTimeFormatter 才能转成字符串。LocalDate 是不可变的、仅含年月日的日期类,没有时间部分,也不带时区,所以不能用旧的 SimpleDateFormat(它只支持 Date 和 Calendar),必须用 Java 8 引入的 java.time.format.DateTimeFormatter。
用 DateTimeFormatter 预定义常量快速格式化
Java 提供了几个常用预设格式器,适合标准场景:
-
DateTimeFormatter.ISO_LOCAL_DATE→ 输出如2024-05-20 -
DateTimeFormatter.BASIC_ISO_DATE→ 输出如20240520 -
DateTimeFormatter.ofPattern("yyyy/MM/dd")→ 自定义分隔符,输出2024/05/20
用 ofPattern 自定义格式(最常用)
这是最灵活的方式,支持常见模式字母:
-
yyyy:4位年份(2024),yy是2位(24) -
MM:两位月份(05),M可输出单数(5) -
dd:两位日期(20),d可输出单数(20) - 注意:
mm是分钟,不能用于 LocalDate(会抛异常),因为 LocalDate 没有时间字段
示例:
String s1 = today.format(DateTimeFormatter.ofPattern("yyyy年MM月dd日")); // → "2024年05月20日"
String s2 = today.format(DateTimeFormatter.ofPattern("MMM dd, yyyy", Locale.ENGLISH)); // → "May 20, 2024"
解析字符串为 LocalDate(反向操作)
格式化是“日期 → 字符串”,解析是“字符串 → LocalDate”,同样靠 DateTimeFormatter:
- 必须确保字符串格式与 pattern 完全匹配,否则抛
DateTimeParseException - 示例:
LocalDate.parse("2024-05-20", DateTimeFormatter.ISO_LOCAL_DATE) - 自定义解析:
LocalDate.parse("2024/05/20", DateTimeFormatter.ofPattern("yyyy/MM/dd"))
注意时区和线程安全
DateTimeFormatter 是**不可变且线程安全的**,可以作为 static final 常量复用:
public static final DateTimeFormatter CHN_DATE = DateTimeFormatter.ofPattern("yyyy年MM月dd日");// 多线程调用 safe
而 LocalDate 本身也线程安全,整个流程无需额外同步。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











