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)

 

代碼如下:

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;
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM