2011-10-02 95 views
4

嗯,我試圖從RSS趕時間,我得到這個execption在logcat中:無法解析的日期例外

E/AndroidNews( 870): Caused by: java.text.ParseException: Unparseable date: "Su 
n, 02 Oct 2011 14:00:00 +0100" 
E/AndroidNews( 870): at java.text.DateFormat.parse(DateFormat.java:626) 
E/AndroidNews( 870): at com.warriorpoint.androidxmlsimple.Message.setDate(Mes 
sage.java:57) 

格式化

靜態的SimpleDateFormat格式器= 新SimpleDateFormat(「yyyy-MM-dd HH:mm」);'

我的方法setDate();

public void setDate(String date) { 
    this.date=null; 

    // pad the date if necessary 
    while (!date.endsWith("00")){ 
     date += "0"; 
    } 
    try { 
     this.date = FORMATTER.parse(date.trim()); 
    } catch (ParseException e) { 
     throw new RuntimeException(e); 
    } 
} 
+0

很明顯,輸入的格式不是預期的。所以,一個ParseException是正常的,不是嗎? –

+0

有點偏離主題,但從不將SimpleDateFormat放入靜態變量中。你最終只會使用來自多個線程的SimpleDateFormat實例,並且由於它不是線程安全的,因此會產生錯誤的日​​期和時間。 – Bloodboiler

回答

9

您使用了錯誤的格式, 「孫,2011年10月2日14:00:00 +0100」 試試這個來代替:

new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z", Locale.US) 

這也迫使區域設置爲(美國)英文,所以日期和月份名稱不受設備區域設置的影響,例如在葡萄牙的語言環境中(我在你的個人資料中偷看),期待「Dom」爲「Sun」和「Oct」爲「Out」。

您在問題中的格式只能分析像「2011-10-02 14:00」這樣的日期。

此外,不要填充日期,讓您的格式化程序執行解析。


以某種方式如果你想輸出/顯示java.util.Date,只需創建一個新的SimpleDateFormat(我們稱之爲displayFmt)與所需的格式化字符串並調用它format()

String formattedDate = new SimpleDateFormat("dd MM yyyy H").format(date); 

這會給你今天的「02 10 2011 17」之類的東西,在用戶/設備的首選區域設置格式。

請注意,您的評論,你說dd mm yyyy h(小寫mh),這會給你「請將dayOfMonth分鐘年hours12」 - 我認爲這是不是你想要的,所以我把它改成一個上案例M和大寫字母H給你「dayOfMonth month year hours24」。

+0

我改變了格式,並在模擬器中工作,但在我的真實手機中發生異常,我看到logcat和他指向這一行: 'this.date = FORMATTER.parse(date.trim()); ' – unpix

+0

您是否更新了手機上的應用程序?手機上的「logcat」是否包含與問題中相同的堆棧跟蹤和信息? (你可以像插入仿真器一樣檢查手機的'logcat') - 請用新信息更新你的問題,評論太小了。 –

+0

是的,我更新了我的應用程序。 這是我手機的logcat - > [link](http://pastebin.com/mML1q5k7)的日誌錯誤。 奇怪的是,它在模擬器中完美工作,而不是在我的手機上。 謝謝。 – unpix