繁体   English   中英

Java String to Date不可解析的日期

[英]Java String to Date unparsable 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)

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

SimpleDataFormat无法读懂您的想法,您提供的模式与您传入.parse()的格式不匹配。

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

然后你可以使用.applyPattern()调用.format()来获得你想要的格式化输出。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM