我已尝试使用以下代码以Tue Apr 11 00:00:00 CEST 2017
格式解析日期。但是,它显示了解析异常。如何解析Tue Apr 11 00:00:00 CEST 2017
的日期格式?
SimpleDateFormat sdf=new SimpleDateFormat("EEE MMM dd HH:mm:ss zzzz yyyy");
Date bbDate=sdf.parse(String.valueOf("Tue Apr 11 00:00:00 CEST 2017"));
System.out.println(bbDate);
答案 0 :(得分:1)
你有一个未处理的例外。你需要在try-catch中包围解析行,或者让函数本身抛出异常。
SimpleDateFormat sdf=new SimpleDateFormat("EEE MMM dd HH:mm:ss zzzz yyyy");
try {
Date bbDate = sdf.parse("Tue Apr 11 00:00:00 CEST 2017");
System.out.println(bbDate);
} catch (ParseException e) {
// … Handle exception.
System.out.println( "ERROR…" );
}
以下是有关Java异常的更多信息的文档。 https://docs.oracle.com/javase/tutorial/essential/exceptions/
答案 1 :(得分:1)
最好使用新的Java Date Time api:http://www.oracle.com/technetwork/articles/java/jf14-date-time-2125367.html
您可以使用新的API执行相同的操作,如下所示:
ZonedDateTime.parse("Tue Apr 11 00:00:00 CEST 2017",
DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss z yyyy")).toLocalDateTime();
答案 2 :(得分:0)
它只是没有处理Parse异常。你的SimpleDateFormat很好。
try {
SimpleDateFormat sdf=new SimpleDateFormat("EEE MMM dd HH:mm:ss zzzz yyyy");
Date bbDate;
bbDate = sdf.parse(String.valueOf("Tue Apr 11 00:00:00 CEST 2017"));
System.out.println(bbDate);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
答案 3 :(得分:0)
由于您的字符串在工作日和月份中使用英文名称,因此您需要确保SimpleDateFormat
使用具有英语的语言环境,例如:
SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzzz yyyy", Locale.ROOT);
通过此更改,您的代码将打印出来(使用Java 8进行测试):
Tue Apr 11 00:00:00 CEST 2017
编辑:请填写相应的(英语)语言区域,而不是Locale.ROOT
。
我同意AliSağlam热烈推荐Java 8中引入的java.time
类。但是仍然需要控制语言环境:
ZonedDateTime.parse("Tue Apr 11 00:00:00 CEST 2017",
DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss z yyyy",
Locale.ROOT))
.toLocalDateTime();
最后,在我们了解建议时,看看您是否可以找到一种方法来避免像CEST
这样的三个和四个字母的时区缩写。他们中的许多人都很暧昧,CEST甚至不是真正的全时区,只是中欧时区的夏半。虽然它按照预期的方式在夏季时间的一半有一个日期,但我甚至不确定如果有一天你在冬天有一个CEST
时区缩写的日期我应该期待什么。