最近项目一直会出现时间转换报错,一直不知道是什么问题???
java.lang.NumberFormatException: multiple pointsat 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;} }