您正在使用格式模式字符串
yyyyMMdd。您正在解析日期
时间字符串
2018-06-20 00:00:00。
2018火柴
yyyy。
MM意味着月份应该是两个字符,所以-0被取为一个月。并且
-0或仅将0视为
2018年1 月的前一个月,即2017年12月。最后6将其视为月份中的某一天。它也应该是两个字符,但是由于只有一个数字,因此就
SimpleDateFormat解决了。字符串的其余部分被默认忽略。
解析另一个字符串时,确实发生了同样的事情。
SimpleDateFormat简而言之,这是一个已经过时的类:在尝试友好和乐于助人的过程中,它会产生最不愉快和令人困惑的
惊喜。在您希望它告诉您有什么问题的地方,它只是假装一切都很好。这是导致此类麻烦的主要原因之一,也是4年前Java 8 取代旧类的原因。所以就不再使用
SimpleDateFormat。
而是查看
java.time和它
DateTimeFormatter。
也不要从数据库中获取日期值作为字符串。根据查询返回的数据类型,获取
aLocalDateTime或
LocalDate对象。这将使您完全摆脱解析。



