java中datetimeformatter通过“先定义模式,再匹配或生成”实现线程安全的日期解析与格式化,支持预设格式(如iso_local_date)和自定义模式(如"yyyy年mm月dd日 hh:mm:ss"),并需根据时区信息选用zoneddatetime或offsetdatetime解析。

Java 中用 DateTimeFormatter 解析和格式化日期字符串,核心是“先定义模式,再匹配或生成”。它替代了老式的 SimpleDateFormat,线程安全、不可变、支持多种预设格式,也支持自定义模式。
使用预设格式器快速解析常见时间字符串
Java 提供了多个静态常量,适合标准格式:
-
DateTimeFormatter.ISO_LOCAL_DATE→ "2023-10-05" -
DateTimeFormatter.ISO_LOCAL_DATE_TIME→ "2023-10-05T14:30:45" -
DateTimeFormatter.ISO_OFFSET_DATE_TIME→ "2023-10-05T14:30:45+08:00"
示例:
String str = "2023-10-05"; LocalDate date = LocalDate.parse(str, DateTimeFormatter.ISO_LOCAL_DATE);
用自定义模式解析任意格式的字符串
用 DateTimeFormatter.ofPattern("模式") 构建格式器。注意大小写和重复数有含义:
-
yyyy:4位年份;yy:2位年份 -
MM:月份(01–12);MMM:英文缩写(Jan);MMMM:全称(January) -
dd:日(01–31);HH:24小时制;hh:12小时制;mm:分钟;ss:秒 -
SSS:毫秒(000–999);XXX:时区偏移(+08:00)
示例(解析中文格式):
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
String str = "2023年10月05日 14:30:45";
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
LocalDateTime dt = LocalDateTime.parse(str, fmt);
解析带时区或偏移的时间字符串
如果字符串含时区信息(如 "2023-10-05T14:30:45+08:00" 或 "2023-10-05T14:30:45Z"),需用能容纳时区的类型:
-
ZonedDateTime.parse()→ 支持完整时区(如 "Asia/Shanghai") -
OffsetDateTime.parse()→ 支持固定偏移(如 "+08:00") - 避免用
LocalDateTime.parse()解析带偏移的字符串,会抛异常
示例:
String str = "2023-10-05T14:30:45+08:00"; OffsetDateTime odt = OffsetDateTime.parse(str); // 或指定格式器 DateTimeFormatter fmt = DateTimeFormatter.ISO_OFFSET_DATE_TIME; OffsetDateTime odt2 = OffsetDateTime.parse(str, fmt);
格式化日期对象为字符串
调用 format() 方法即可,和解析方向相反:
- 所有
TemporalAccessor子类(如LocalDate、ZonedDateTime)都支持 - 格式器复用安全,可提前定义为
static final
示例:
LocalDateTime now = LocalDateTime.now();
String s = now.format(DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"));
// 输出:2023/10/05 14:30:45
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










