为什么此代码会生成错误:“notarseable date”

时间:2011-01-12 01:00:23

标签: java datetime simpledateformat

我正在尝试使用SimpleDateFormat类来解析此字符串中的DateTime:

Mon Jan 10 2011 01:15:00 GMT+0000 (GMT Standard Time)

我尝试了以下格式字符串:

String example = "Mon Jan 10 2011 01:15:00 GMT+0000 (GMT Standard Time)";
SimpleDateFormat formatter = new SimpleDateFormat("E M d y H:m:s z");
try
{
    Date exampleDate = formatter.parse(example);
    LOGGER.warn(exampleDate.toString());
}
catch(Exception e)
{
    LOGGER.warn(e.getMessage(), e);
}

但它会产生错误:

Unparseable date: "Mon Jan 10 2011 01:15:00 GMT+0000 (GMT Standard Time)"

所以我尝试删除示例字符串的括号结尾部分:

String example = "Sun Jan 09 2011 22:00:00 GMT+0000";

但它会产生同样的错误。

WARNING: Unparseable date: "Sun Jan 09 2011 22:00:00 GMT+0000"
java.text.ParseException: Unparseable date: "Sun Jan 09 2011 22:00:00 GMT+0000"

有关如何解决这个问题的任何提示?

4 个答案:

答案 0 :(得分:2)

根据http://download.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html格式需要:

"E M d y H:m:s zZ"

这包括一般时区和RFC 822时区。

或者您可以将输入日期更改为:

Mon Jan 10 2011 01:15:00 GMT+00:00

只能容纳z

(注意最后一部分的冒号。)

答案 1 :(得分:2)

您应该使用(或Z仅用于最后一部分):

E MMM dd yyyy HH:mm:ss zZ 

答案 2 :(得分:1)

如果要解析文本月份,还需要使用“MMM”。来自javadocs:

“月份:如果模式字母的数量为3或更多,则将月份解释为文本;否则,将其解释为数字。”

答案 3 :(得分:0)

认为问题是z修饰符无法解析GMT+0000。根据{{​​3}},格式类似于GMT + HH:MM,而不是GMT + HHMM。如果要解析所拥有的内容,可能需要从

更改格式字符串
E M d y H:m:s z

E M d y H:m:s 'G'M'Tz