Java.time-解析一个月的名称不起作用

时间:2018-11-06 11:06:38

标签: java java-8 date-parsing java.time

我必须处理从Java中的外部API收到的时间戳。日期时间格式的示例可能如下所示:

"May 9, 2018 5:32:31 PM CEST"

查阅DateTimeFormatter#Predefined Formatters文档中的信息后,我发现此格式未作为预定义格式包括在内。 因此,我继续使用DateTimeFormatter#Patterns for Formatting and Parsing定义自己的DateTimeFormatter并得到以下错误消息:

Exception in thread "main" java.time.format.DateTimeParseException: Text 'May 9, 2018 5:32:31 PM CEST' could not be parsed at index 0

所以我转到“ Java教程”,发现他们解析月份名称的示例在我的程序中不起作用...

来自The Java Tutorials Parsing and Formatting

String input = "Mar 23 1994";
    try {
        DateTimeFormatter formatter =
                          DateTimeFormatter.ofPattern("MMM d yyyy");
        LocalDate date = LocalDate.parse(input, formatter);
        System.out.printf("%s%n", date);
    }
    catch (DateTimeParseException exc) {
        System.out.printf("%s is not parsable!%n", input);
        throw exc;      // Rethrow the exception.
    }

这引发了同样的错误消息,因为到达月份的名称时解析失败。所以我的问题是如何使用java.time包从上方解析datetime字符串。

this question的答案在我的计算机上正常运行。 (因此MMM模式有效,但从字符串解析时无效)

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

日期字符串将使用默认语言环境(可能是Locale.GERMAN进行解析。)

如果文本不是使用相应的语言,则必须指定正确的Locale,例如:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMM d yyyy").withLocale(Locale.ENGLISH);