这是我正在使用正则表达式提取信息的字符串:
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)
答案 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
注意:您需要使用适当的区域设置来解析和打印月/日名称