1

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

2823893a2f91c7507831f140dd7aa75e420477b0 - #0023922:修复了违约债券的消息;2012 年 10 月 25 日星期四 12:08:25 +0000

这是我用来提取字符串然后尝试将其转换为日期的代码:

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)
4

2 回答 2

2

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

SimpleDataFormat无法读懂你的想法,你给它的模式与你传入的格式不匹配.parse()

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

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

于 2013-07-11T14:51:56.420 回答
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

注意:您需要使用适当的语言环境来解析和打印月/日名称

于 2013-07-11T14:57:24.970 回答