2011-10-02 117 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