解析Wed Apr 03 00:00:00 BST 2013时,java.util.Date.parse()会抛出异常

时间:2013-03-20 11:43:26

标签: java

为什么会抛出一个异常,那个日期很直接不是吗?

long date  = Date.parse(request.getParameter("date")); //Wed Apr 03 00:00:00 BST 2013
String formattedDate = new SimpleDateFormat("dd/MM/yyyy").format(date);
reportParams.put("p_date", formattedDate);
  

引起:java.lang.IllegalArgumentException at   java.util.Date.parse(Date.java:595)

3 个答案:

答案 0 :(得分:2)

不要使用Date.parse()来解析日期。正如您在API documentation中看到的那样,该方法已被弃用,这意味着它被另一个方法替换。 API文档甚至提到了您应该使用的内容:DateFormat.parse()

使用与输入字符串匹配的格式创建SimpleDateFormat对象,并使用该对象将其解析为Date对象。

String text = "Wed Apr 03 00:00:00 BST 2013";
DateFormat df = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.ENGLISH);
Date date = df.parse(text);

答案 1 :(得分:1)

主要问题是您在字符串末尾有日期。它应该在月之后出现,例如:

  

2013年4月3日星期三00:00:00 BST

read the documentation获取完整说明。另请注意,Date.parse已弃用,而不是DateFormat.parse

答案 2 :(得分:1)

1)不推荐使用Date.parse

2)Date.parse API说它接受许多语法;特别是,它承认IETF标准日期语法:“星期六,1995年8月12日13:30:00 GMT”。它也理解美国大陆时区的缩写,但对于一般用途,应使用时区偏移:“星期六,1995年8月12日13:30:00 GMT + 0430”(格林威治以西4小时30分钟)子午线)。如果未指定时区,则假定为本地时区。 GMT和UTC被认为是等效的。但您的语法不是所描述的。

3)改为使用SimleDateFormat