解析yyyy-MM-dd HH:mm:ss.SSSSSSS格式日期为Date报错原因及解决
日期解析失败原因及解决方法
为什么无法解析?
代码抛出ParseException的核心原因是日期格式字符串与输入的日期字符串完全不匹配:
- 输入日期的日期部分是
年-月-日(用连字符-分隔),但你使用的格式字符串是dd/MM/yyyy(用斜杠/分隔,顺序为日/月/年),分隔符和日期顺序均不匹配 - 输入日期包含7位毫秒后缀
.0117372,但你的格式字符串仅定义到秒ss,没有匹配毫秒部分的规则,导致解析器无法识别该内容
正确解析的两种方案
方案1:修正SimpleDateFormat的格式字符串(旧API)
若仍需使用SimpleDateFormat,需调整格式字符串完全匹配输入结构:
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class DateParseDemo { public static void main(String[] args) { String dateStr = "2020-04-14 16:34:40.0117372"; // 格式字符串匹配:年-月-日 时:分:秒.7位毫秒 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSSS"); try { Date date = sdf.parse(dateStr); String formattedDate = sdf.format(date); System.out.println(formattedDate); } catch (ParseException e) { e.printStackTrace(); } } }
方案2:使用Java 8+的java.time新API(推荐)
SimpleDateFormat存在线程不安全问题,Java 8及以上推荐使用线程安全、功能更完善的java.time包:
import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; public class LocalDateTimeParseDemo { public static void main(String[] args) { String dateStr = "2020-04-14 16:34:40.0117372"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSSS"); LocalDateTime dateTime = LocalDateTime.parse(dateStr, formatter); String formattedDate = dateTime.format(formatter); System.out.println(formattedDate); } }
注:
DateTimeFormatter默认严格匹配格式,若输入存在格式不一致的情况,可通过withResolverStyle调整解析宽松度。
内容的提问来源于stack exchange,提问作者Victor
相关产品推荐
相关产品推荐

