最近项目一直会出现时间转换报错,一直不知道是什么问题???
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)
代码如下:
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; } }
如果是上述代码,那么在多线程环境下,你可能会收到如标题所示的错误。
解决办法
1、建议在每个方法中都new一个新的SimpleDateFormat对象,这样子就可以避免这种问题。
2、也可以使用保存线程局部变量的ThreadLocal对象来保存每一个线程的SimpleDateFormat对象。
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class DateUtils { private static final String format = "yyyy-MM-dd"; //每一个线程 private static final ThreadLocal<SimpleDateFormat> threadLocal = new ThreadLocal<SimpleDateFormat>(); public static Date covertDateStrToDate(String dateStr){ SimpleDateFormat sdf = null; sdf = threadLocal.get(); if (sdf == null){ sdf = new SimpleDateFormat(format); } // Date date = null; try { System.out.println("当前线程为:" + Thread.currentThread().getName()); date = sdf.parse(dateStr); } catch (ParseException e) { e.printStackTrace(); } return date; } }