如何使用SimpleDateFormat解析日期?解决Unparseable date报错问题
问题根因
配置的日期解析模板与待解析字符串结构完全不匹配,是抛出Unparseable date运行时错误的直接原因。
具体的结构不匹配点:
- 代码中使用的模板
dd/MM/yyyy要求输入为斜杠分隔的「日/月/年」格式,合法可解析的输入示例为21/02/2021 - 实际待解析的字符串
Sun, 21 Feb 2021 22:13:42,结构为「英文星期缩写, 日期 英文月份缩写 年份 时分秒」,既不满足模板要求的斜杠分隔规则,也包含模板未覆盖的星期、英文月份、时间字段,完全不在SimpleDateFormat的匹配范围内。
修正方案
- 调整解析模板为与输入字符串结构完全对齐的格式:对应
Sun, 21 Feb 2021 22:13:42这类带英文星期、英文月份缩写的格式,正确的匹配模板为EEE, dd MMM yyyy HH:mm:ss - 显式指定英文语言环境:星期、月份缩写的匹配是依赖JVM运行区域的,如果JVM处于非英文语言环境,即使模板写对,也无法识别
Sun、Feb这类英文缩写,依旧会触发解析失败。创建SimpleDateFormat实例时需要主动传入英文区域参数:public Date parseDate(String date) { // 显式指定英文区域,匹配英文缩写的星期与月份 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss", Locale.ENGLISH); try { return simpleDateFormat.parse(date); } catch (Exception e) { e.printStackTrace(); return new Date(); } } - 注意现有兜底逻辑的隐患:当前代码在捕获异常后直接返回当前时间的逻辑,会掩盖真实的解析错误,建议在调试阶段暂时移除该兜底逻辑,等格式匹配问题全部验证通过后,再根据业务实际需求设计异常处理策略。
内容的提问来源于stack exchange,提问作者programmingbro
相关产品推荐
相关产品推荐

