java 日期转换异常java.text.ParseException: Unparseable date:

在做字符串转换日期格式的时候抛异常,如下:
代码部分:
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
在这里插入图片描述

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值