如何在Java 4月11日00:00:00 CEST 2017格式中解析日期?

时间:2017-04-19 09:10:31

标签: java date

我已尝试使用以下代码以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);

4 个答案:

答案 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时区缩写的日期我应该期待什么。