使用SimpleDateFormat解析含毫秒日期遇ParseException问题求助
如何用SimpleDateFormat解析包含毫秒的日期字符串?
看起来你遇到的问题是格式字符串和目标日期的结构不匹配导致的解析异常,我来帮你拆解问题并给出解决方案:
首先,你的代码里有两个关键错误:
- 月份格式不匹配:你用了
MM(对应数字格式的月份,比如05),但目标日期里是英文月份缩写MAY,这时候应该用MMM来匹配英文月份缩写。 - 缺少毫秒的格式定义:目标日期末尾有
:000(毫秒部分),但你的格式字符串只有ss(秒),需要加上SSS来匹配毫秒,并且要保留分隔的冒号,也就是写成ss:SSS。
另外还要注意,解析英文月份的时候,最好指定Locale(比如Locale.US),避免系统默认语言不是英文时出现解析错误。
修正后的SimpleDateFormat代码如下:
// 指定Locale.US确保英文月份能正确解析 SimpleDateFormat format = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss:SSS", Locale.US); Date dft = format.parse("16-MAY-2018 09:30:22:000");
额外建议:使用Java 8+的新日期API
如果你的项目是Java 8及以上版本,更推荐使用java.time包下的DateTimeFormatter,因为SimpleDateFormat是线程不安全的,新API设计更清晰也更可靠:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MMM-yyyy HH:mm:ss:SSS", Locale.US); LocalDateTime dateTime = LocalDateTime.parse("16-MAY-2018 09:30:22:000", formatter); // 如果需要转换成Date对象(兼容旧代码) Date dft = Date.from(dateTime.atZone(ZoneId.systemDefault()).toInstant());
这样就能正确解析包含毫秒的日期字符串啦!
内容的提问来源于stack exchange,提问作者zyan Billings
相关产品推荐
相关产品推荐

