无法解释的日期异常

unp*_*pix 4 android date exception

好吧,我正试图从rss中捕获日期,我在logcat中得到了这个execption:

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)
Run Code Online (Sandbox Code Playgroud)

我的格式化程序

static SimpleDateFormat FORMATTER = new 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

Phi*_*art 9

您使用的格式错误,对于"Sun,02 Oct 2011 14:00:00 +0100",请尝试以下方法:

new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z", Locale.US)
Run Code Online (Sandbox Code Playgroud)

这也强制语言环境为(美国)英语,因此日期和月份名称不受设备的语言环境影响,例如在葡萄牙语语言环境中期望"太阳报"为"Dom","Out"为"Out"(我偷看)在你的个人资料).

您在问题中的格式只能解析"2011-10-02 14:00"等日期.

另外,不要填充日期,让格式化程序进行解析.


如果您想以java.util.Date某种方式输出/显示a ,只需使用所需的格式化字符串创建一个新的SimpleDateFormat(让我们称之为displayFmt)并调用format()它:

String formattedDate = new SimpleDateFormat("dd MM yyyy H").format(date);
Run Code Online (Sandbox Code Playgroud)

这将为您提供今天的"02 10 2011 17",格式为用户/设备的首选区域设置.

请注意,在你的评论中,你说dd mm yyyy h(小写mh)会给你"dayOfMonth 分钟年份12" - 我认为这不是你想要的,所以我把它改成大写M和大H写给你"dayOfMonth hours24 ".