java 8起推荐使用java.time包解析日期字符串,通过datetimeformatter支持iso标准格式、自定义模式(含中文)及类型转换,并需捕获datetimeparseexception异常。

Java 中推荐使用 java.time 包(自 Java 8 引入)来解析字符串为日期时间对象,它线程安全、设计清晰、功能强大,完全替代了老旧的 Date 和 SimpleDateFormat。
使用 DateTimeFormatter 解析常见格式
核心是 DateTimeFormatter —— 它定义了字符串与日期时间对象之间的转换规则。系统提供了许多预定义格式器,也支持自定义模式。
- 解析 ISO 标准格式(如
"2024-05-20"或"2024-05-20T14:30:45")可直接用内置常量:
LocalDate date = LocalDate.parse("2024-05-20"); // 默认按 ISO_LOCAL_DATE
LocalDateTime dt = LocalDateTime.parse("2024-05-20T14:30:45"); // 默认按 ISO_LOCAL_DATE_TIME
- 解析带时区的字符串(如
"2024-05-20T14:30:45+08:00")用ZonedDateTime.parse():
ZonedDateTime zdt = ZonedDateTime.parse("2024-05-20T14:30:45+08:00");
自定义格式解析(如 "2024/05/20" 或 "2024年5月20日")
当字符串不符合 ISO 格式时,需显式创建 DateTimeFormatter。
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 用
DateTimeFormatter.ofPattern("yyyy/MM/dd")解析"2024/05/20": - 中文格式需注意:年、月、日等汉字是文字,不是占位符,要用单引号包裹,例如
"yyyy'年'MM'月'dd'日'":
DateTimeFormatter fmt1 = DateTimeFormatter.ofPattern("yyyy/MM/dd");
LocalDate d1 = LocalDate.parse("2024/05/20", fmt1);
DateTimeFormatter fmt2 = DateTimeFormatter.ofPattern("yyyy'年'MM'月'dd'日'");
LocalDate d2 = LocalDate.parse("2024年05月20日", fmt2);
处理不带时间的字符串 → 得到 LocalDateTime 或 ZonedDateTime
LocalDate.parse() 只能返回 LocalDate;若需转成带时间的类型,需手动“补全”:
- 补零点时间 → 转
LocalDateTime:
LocalDate date = LocalDate.parse("2024-05-20");
LocalDateTime ldt = date.atStartOfDay(); // 2024-05-20T00:00
- 指定时区 → 转
ZonedDateTime:
ZonedDateTime zdt = date.atStartOfDay(ZoneId.of("Asia/Shanghai"));
异常处理与注意事项
解析失败会抛出 DateTimeParseException,务必捕获处理:
- 检查字符串是否为空或 null,避免
NullPointerException - 确认格式器模式与字符串严格匹配(如
MM要求两位月份,M则允许一位) -
DateTimeFormatter是不可变且线程安全的,可复用、可静态缓存
try {
LocalDate d = LocalDate.parse(input, formatter);
} catch (DateTimeParseException e) {
throw new IllegalArgumentException("日期格式错误: " + input, e);
}
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










