在我正在使用的Web应用程序上,我以String的格式检索日期,例如Tue Dec 30 14:28:38 CET 2014。我想将其解析为Java8 LocalDateTime。以下是我的尝试摘要:

String string = "Tue Dec 30 14:28:38 CET 2014";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss zzz yyyy");
LocalDateTime localDateTime = LocalDateTime.parse(string, formatter);


但是,它引发以下异常:


  java.time.format.DateTimeParseException:无法在索引0处解析文本'Tue Dec 30 14:28:38 CET 2014'


这是怎么引起的,我该如何解决?

最佳答案

该日期可能对当前语言无效。月和日的缩写从一个Locale更改为另一个。

检查以下示例:ideone demo

public static void main (String[] args) {
    String string = "Tue Dec 30 14:28:38 CET 2014";
    try {
        new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.ENGLISH).parse(string);
        System.out.println("OK ENGLISH");
    } catch (Exception ex) {
        System.out.println("KO ENGLISH");
    }

    try {
        new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.GERMAN).parse(string);
        System.out.println("OK GERMAN");
    } catch (Exception ex) {
        System.out.println("KO GERMAN");
    }
}


使用String而不是Locale.ENGLISH解析Locale.GERMAN时可以(因为它应该是"Di Dez 30 14:28:38 CET 2014")可以。

如果未指定Locale,则使用默认值。

07-28 08:32