时间转换报java.lang.NumberFormatException: multiple points问题

最近项目一直会出现时间转换报错,一直不知道是什么问题,

java.lang.NumberFormatException: multiple points
    at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1110)
    at java.lang.Double.parseDouble(Double.java:540)
    at java.text.DigitList.getDouble(DigitList.java:168)
    at java.text.DecimalFormat.parse(DecimalFormat.java:1321)
    at java.text.SimpleDateFormat.subParse(SimpleDateFormat.java:1793)
    at java.text.SimpleDateFormat.parse(SimpleDateFormat.java:1455)

报错的地方是项目用SimpleDateFormat写了个DateUtil工具类,用来时间转换的,代码如下:

    public final class DateUtil {
        
        private static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
     
        
        public static Date parseDateTime(String dateTimeStr) {
            try {
                return dateFormat.parse(dateTimeStr);
            } catch (ParseException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return null;
        }
     
    }

其中

 return dateFormat.parse(dateTimeStr);

偶偶会报java.lang.NumberFormatException: multiple points或者报java.lang.NumberFormatException: For input string: ".31023102EE22"

今天实在是忍受了,百度了下,原来是SimpleDateFormat是非线程安全的,在多线程情况下会有问题,在每个线程下得各自new SimpleDateFormat()就可以了

java.lang.NumberFormatException: multiple points 异常

2016年11月15日 20:48:09 朱智胜 阅读数:8979 标签: java 更多

个人分类: Java基础

版权声明:本文为博主原创文章,转载请写明出处。 https://blog.csdn.net/wo541075754/article/details/53177139

平时使用SimpleDateFormat的时候都是在单线程的情况下使用的,今天在改写别人的代码,发现每个类中都会写大量的SimpleDateFormat实例。作为一个程序特有的洁癖开始对代码进行优化。
其实所谓优化操作也很简单,就是把所有的SimpleDateFormat抽到一个DateUtils类中,并提供静态方法。
优化之后,奇怪的事情发生了。部分程序报下面异常:

java.lang.NumberFormatException: multiple points
  • 1

带着疑惑搜索解决方案,并查看项目代码,结果发现自己有些优化真是好心办坏事。原来,部分代码用到了多线程。只顾着优化,忽略了多线程时不能使用SimpleDateFormat。原因很简单SimpleDateFormat是线程不安全的。

在此记录一下自己踩的坑。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值