DateTimeFormatter是Java中线程安全、不可变的日期时间格式化与解析工具,推荐替代SimpleDateFormat;支持预定义常量、自定义pattern及带时区格式,建议static final复用。

Java 中 DateTimeFormatter 是格式化和解析日期时间的核心工具,它线程安全、不可变,推荐替代旧的 SimpleDateFormat。
使用预定义格式器快速格式化
对于常见格式,直接用 DateTimeFormatter 的静态常量最简单:
-
DateTimeFormatter.ISO_LOCAL_DATE→ "2024-05-20" -
DateTimeFormatter.ISO_LOCAL_TIME→ "14:30:45" -
DateTimeFormatter.ISO_LOCAL_DATE_TIME→ "2024-05-20T14:30:45" -
DateTimeFormatter.BASIC_ISO_DATE→ "20240520"
示例:
将后端 Java 接口文档转换为前端 TypeScript 类型定义(interface / type)。输入:飞书文档、Spring Boot 接口文档、Swagger/OpenAPI、手写 API 文档等。输出:包含请求参数与响应结果的 .md 文件,含完整 JSDoc 注释。触发关键词:Java 转 TS、接口转换、生成前端类型、接口文档转 TypeScript、DTO/VO/BO 转 interface、后端文档转前端类型、生成接口类型、类型定义生成。
LocalDateTime now = LocalDateTime.now(); String s = now.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME); // 输出类似:2024-05-20T14:30:45
自定义模式字符串(最常用)
用 DateTimeFormatter.ofPattern("pattern") 按需组合符号:
- yyyy:4位年份;yy:2位年份
- MM:两位月份(01–12);MMM:缩写(Jan);MMMM:全称(January)
- dd:日(01–31);HH:24小时制小时(00–23);hh:12小时制(01–12)
- mm:分钟;ss:秒;SSS:毫秒(000–999)
- a:AM/PM;zzz:时区缩写(CST);xxx:ISO时区(+08)
示例:
LocalDateTime dt = LocalDateTime.of(2024, 5, 20, 14, 30, 45, 123_000_000);
String s = dt.format(DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss.SSS"));
// 输出:2024年05月20日 14:30:45.123
处理时区和带偏移的时间
若含时区信息,需用 ZonedDateTime 或 OffsetDateTime:
- 用
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS XXX")格式化带偏移的时间 -
ZonedDateTime.now().format(...)可输出如 "2024-05-20 14:30:45.123 +08" - 想显示时区名称(如 CST、PST),用
zzz或zzzz,但需注意本地化(可搭配withLocale(Locale.CHINA))
示例:
ZonedDateTime zdt = ZonedDateTime.now(ZoneId.of("Asia/Shanghai"));
String s = zdt.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS zzz", Locale.CHINA));
// 输出:2024-05-20 14:30:45.123 中国标准时间
注意点与最佳实践
- 格式器是不可变的,可复用、可共享,建议声明为
static final - 模式中字母大小写敏感:
YYYY(基于周的年)≠yyyy(日历年),日常用yyyy - 解析时若字符串不匹配模式会抛
DateTimeParseException,建议加 try-catch - 中文环境下显示“年”“月”“日”,直接写在 pattern 字符串里即可,无需特殊设置
不复杂但容易忽略。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










