Java中如何将24小时制字符串转为ZonedDateTime?解析异常求助
解决24小时制字符串转ZonedDateTime的解析异常问题
你这是踩了DateTimeFormatter格式匹配的两个典型坑,我来帮你梳理清楚问题和修复方案:
问题根源
你的输入字符串格式是时间在前、日期在后(比如13:05 2017-03-19),但你定义的格式化模式yyyy-MM-dd HH:mm:ss是日期在前、时间在后,而且输入里根本没有秒数部分,模式里却多了:ss——这两个不匹配直接导致了解析失败。
修复后的代码
调整格式化模式为和输入完全匹配的HH:mm yyyy-MM-dd,再执行解析和时区转换操作:
// 匹配输入的"HH:mm yyyy-MM-dd"格式 DateTimeFormatter zoneParser = DateTimeFormatter.ofPattern("HH:mm yyyy-MM-dd"); // 拼接后的字符串(比如"13:05 2017-03-19")和模式完全对齐 this.startZoneTime = LocalDateTime.parse(start + " " + date, zoneParser) .atZone(ZoneId.systemDefault()); this.endZoneTime = LocalDateTime.parse(end + " " + date, zoneParser) .atZone(ZoneId.systemDefault());
额外注意事项
- 如果你的
start或end有可能包含秒数(比如13:05:30),直接把模式改成HH:mm:ss yyyy-MM-dd即可,始终保持和输入格式一致。 - 尽量避免依赖系统默认时区,可指定具体时区(比如
ZoneId.of("Asia/Shanghai")),防止不同运行环境下的时区差异问题。
内容的提问来源于stack exchange,提问作者Brij Patel
相关产品推荐
相关产品推荐

