我必须处理从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
模式有效,但从字符串解析时无效)
感谢您的帮助!
答案 0 :(得分:2)
日期字符串将使用默认语言环境(可能是Locale.GERMAN
进行解析。)
如果文本不是使用相应的语言,则必须指定正确的Locale
,例如:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMM d yyyy").withLocale(Locale.ENGLISH);