2014-12-28 23 views
5

Trong khi phân tích một số lượng lớn các ngày trong java, tôi thỉnh thoảng nhận được lỗi này lạ:Weird ngày lỗi phân tích cú pháp trong Java

java.lang.NumberFormatException: For input string: ".201144E4.201144E4" 
    at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1250) 
    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) 
    at java.text.DateFormat.parse(DateFormat.java:355) 
    at gameloop.tf2tradebot.user.UserManager.getUser(UserManager.java:102) 
    at gameloop.tradebot2.bot.weaponbot1.Weaponbot1.onMessageReceived(Weaponbot1.java:269) 
    at gameloop.api.steam.chat.ChatEvent.run(ChatEvent.java:49) 
    at java.lang.Thread.run(Thread.java:745) 

tôi trường hợp này, ngày đã

2014-12-13 06:56:27 

Định dạng ngày là

private static final DateFormat STANDARD_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH); 

mã của tôi:

Date firstSeenDate = null; 
try 
{ 
    firstSeenDate = STANDARD_DATE_FORMAT.parse(firstSeen); 
} 
catch(Exception pe) 
{ 
    pe.printStackTrace(); 
    logger.outputError(4001, "Error parsing first seen date. Shutting down..."); 
    logger.outputError(4001, "First seen date : \'" + firstSeen + "\'"); 
    CH405BotServer.shutdown(logger.getCallerName(), "an error in parsing first seen date"); 
} 
user.setFirstSeen(firstSeenDate); 

Nguồn dữ liệu:

isadmin = false 
firstseen = 2014-12-13 06:56:27 
lastseen = 2014-12-13 06:56:27 
numtrades = 0 

EDIT: Chuỗi trong bản ghi lỗi dường như hoàn toàn tốt đẹp:

(ERROR 4001) Error parsing first seen date. Shutting down... 
(ERROR 4001) Last seen date : '2014-12-13 06:56:27' 

tôi cần sự giúp đỡ về cách giải quyết này.

+4

Dường như bạn vừa nhận được dữ liệu không tốt - bạn đang cố gắng phân tích giá trị của '" .201144E45.2011 44E4 "' rõ ràng không phải là ngày/giờ trong định dạng 'yyyy-MM-dd HH: mm: ss'. Thật không may bạn đã không nói với chúng tôi bất cứ điều gì về nơi dữ liệu đến từ đâu. –

+4

nhiều chủ đề dường như đang chạy đua để sử dụng cùng một trường hợp và làm rối loạn trạng thái nội bộ của nó, đúng không? –

+0

@JonSkeet Tôi sẽ cập nhật bài đăng trong giây lát hiển thị dữ liệu mẫu. – Hele

Trả lời

4

tôi nghi ngờ nó được gây ra bởi tình trạng chủng tộc, SimpleDateFormatkhông thread-safe và nếu nhiều luồng cố gắng phân tích ngày từ String để ngày sử dụng cùng isntance nó có thể lộn xộn lên trạng thái nội bộ của trường hợp đó

tôi sẽ đề xuất hoặc sử dụng biến cục bộ (cảnh báo: quá đắt để tạo trường hợp này), vì vậy nếu bạn cho rằng quá thường xuyên, bạn có thể sử dụng FastDateFormat (triển khai an toàn theo chủ đề SimpleDateFormat) hoặc như @Ray suggested switch to Java8

+0

plus1 Cảm ơn vì điều đó, tôi đã có một cảm giác xấu lỗi này là do một vấn đề lớn hơn. – Hele

+0

Bạn được chào đón Hele, đó là câu hỏi thú vị –

Các vấn đề liên quan