在做字符串转换日期格式的时候抛异常,如下:
代码部分:
public static void main(String[] args) {
String str = "1987-04-12 00:00:00";
SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
//此处指定日期/时间解析是否不严格,在true是不严格,false时为严格
sd.setLenient(false);
//从给定字符串的开始解析文本,以生成一个日期
sd.parse(str);
} catch (ParseException e) {
e.printStackTrace();
}
}
异常日志:java.text.ParseException: Unparseable date: “1987-04-12 00:00:00”
在网上看到的都是长度不对,或者是格式不对导致的问题,但是我的这个没发现有问题,格式长度都是正确的,仍然是无法解析。后来把字符串修改了一下变成"1987-04-12 01:00:00"竟然解析出来了,又把时间改成其他的测试,发现在1987-04-12 00:00:00到1987-04-12 01:00:00之间的时间都没法解析出来。跟了会源码发现有一块判断有问题,天真的我还以为发现了个jdk的bug呢。然后让同事也测试了一下上面的代码,他的竟然是好用的。。。那么问题应该是jdk版本的问题了,把jdk的版本从jdk1.8.0_181换成jdk1.8.0_271,再次执行上面的代码可以正确的解析出来了。
jdk1.8.0_181是有一些个别的时间是没法解析的,"1987-04-12 00:00:00"是其中的一个,大部分的时间还是可以解析出来的。
结论:jdk1.8的小版本存在一些坑,需要注意一下。
对比了两个版本修改的源码部分,如图:左侧是jdk1.8.0_181 ,右侧是jdk1.8.0_271