Java 8日期时间格式化程序行为不端

use*_*688 4 java datetime datetime-parsing java-8 java-time

我有以下代码抛出DateTimeParseException:

String dateString = "Jul 20 09:32:46"
DateTimeFormatter formatter=DateTimeFormatter.ofPattern("L d HH:mm:ss");
return ZonedDateTime.parse(dateString, formatter);
Run Code Online (Sandbox Code Playgroud)

根据文档,您将观察到这Jul是角色的示例L.

但是,异常消息是:

java.time.format.DateTimeParseException:无法在索引0处解析文本"Jul"

我错过了什么?

Jua*_*oza 7

你有一些问题:

  1. 要正确解析'Jul',你必须使用MMM而不是L(这里解释原因).
  2. 您的日期字符串没有一年.没有年份,您无法创建ZonedDateTime.
  3. 如果是分区日期时间,则必须包括时区信息,这不在您的日期字符串中.LocalDateTime如果您不想使用时区,则可以使用a .

以下是一些替代方案:

随着时区:

String dateString = "Jul 20 2018 09:32:46+0000";
DateTimeFormatter formatter= DateTimeFormatter.ofPattern("MMM dd y H:mm:ssZ");
return ZonedDateTime.parse(dateString, formatter);
Run Code Online (Sandbox Code Playgroud)

没有时区:

String dateString = "Jul 20 2018 09:32:46";
DateTimeFormatter formatter= DateTimeFormatter.ofPattern("MMM dd y H:mm:ss");
return LocalDateTime.parse(dateString, formatter);
Run Code Online (Sandbox Code Playgroud)

  • Nitpick:实际上这是从UTC而不是时区的偏移量.区域是特定区域的人员使用的偏移变化的历史. (2认同)