Java String to Date无法解析的日期

时间:2013-07-11 14:48:03

标签: java string parsing date

这是我正在使用正则表达式提取信息的字符串:

  

2823893a2f91c7507831f140dd7aa75e420477b0 - #0023922:修正了邮件   违约债券; Thu Oct 25 12:08:25 2012 +0000

这是我用来提取String然后尝试将其变为Date的代码:

Pattern pattern3 = Pattern.compile(";\\s(.*)");
Matcher matcher3 = pattern3.matcher(s);
matcher3.find();
String t = matcher3.group(1).toString();
       try {
         Date time = new SimpleDateFormat("dd/MMM/yy hh:mm a").parse(t);
       } catch (ParseException e) {
              e.printStackTrace();
       }

这应该是我输入的格式:

Thu Oct 25 12:08:25 2012 +0000

我想要的是从前面提到的字符串中创建一个日期:

25/Oct/12 12:08 PM

但我一直收到这些错误:

java.text.ParseException: Unparseable date: "Thu Oct 25 12:08:25 2012 +0000"
Fixed the message for defaulted bonds0null
    at java.text.DateFormat.parse(DateFormat.java:337)
    at GitItem.cultivateGitItem(GitItem.java:42)
    at main.main(main.java:9)
java.text.ParseException: Unparseable date: "Thu Oct 25 11:52:39 2012 +0000"
    at java.text.DateFormat.parse(DateFormat.java:337)
    at GitItem.cultivateGitItem(GitItem.java:42)
    at main.main(main.java:9)

2 个答案:

答案 0 :(得分:2)

您的模式必须与传入数据的模式相匹配,而现在还不能。

SimpleDataFormat无法理解您的想法,您提供的模式与您传入.parse()的格式不符。

"dd/MMM/yy hh:mm a"将永远不会匹配Thu Oct 25 12:08:25 2012 +0000,您必须指定传入数据所处的确切模式,这在JavaDocs中有很好的记录。

然后,您可以使用.applyPattern()调用.format()来将模式更改为您想要的格式化输出。

答案 1 :(得分:1)

我只想删除不需要的部分:

String dateAsString = s.replaceAll(".*;\\s+","");

然后你需要DateFormat:一个解析字符串而另一个解析输出正确的格式:

String s = "2823893a2f91c7507831f140dd7aa75e420477b0 - #0023922: Fixed the message for defaulted bonds ; Thu Oct 25 12:08:25 2012 +0000";
System.out.println("s = " + s);
String dateAsString = s.replaceAll(".*;\\s+","");
System.out.println("dateAsString = " + dateAsString);
DateFormat parser = new SimpleDateFormat("EEE MMM dd HH:mm:ss yyyy X", Locale.ENGLISH);
Date date = parser.parse(dateAsString);
System.out.println("date = " + date);
DateFormat formatter = new SimpleDateFormat("dd/MMM/yyyy hh:mm a", Locale.ENGLISH);
formatter.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println(formatter.format(date));

输出:

s = 2823893a2f91c7507831f140dd7aa75e420477b0 - #0023922: Fixed the message for defaulted bonds ; Thu Oct 25 12:08:25 2012 +0000
dateAsString = Thu Oct 25 12:08:25 2012 +0000
date = Thu Oct 25 14:08:25 CEST 2012
25/Oct/2012 12:08 PM

注意:您需要使用适当的区域设置来解析和打印月/日名称