在 Java8 中使用时区格式化 LocalDateTime

新手上路,请多包涵

我有这个简单的代码:

 DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyyMMdd HH:mm:ss.SSSSSS Z");
LocalDateTime.now().format(FORMATTER)

然后我会得到以下异常:

 java.time.temporal.UnsupportedTemporalTypeException: Unsupported field: OffsetSeconds
at java.time.LocalDate.get0(LocalDate.java:680)
at java.time.LocalDate.getLong(LocalDate.java:659)
at java.time.LocalDateTime.getLong(LocalDateTime.java:720)
at java.time.format.DateTimePrintContext.getValue(DateTimePrintContext.java:298)
at java.time.format.DateTimeFormatterBuilder$OffsetIdPrinterParser.format(DateTimeFormatterBuilder.java:3315)
at java.time.format.DateTimeFormatterBuilder$CompositePrinterParser.format(DateTimeFormatterBuilder.java:2182)
at java.time.format.DateTimeFormatter.formatTo(DateTimeFormatter.java:1745)
at java.time.format.DateTimeFormatter.format(DateTimeFormatter.java:1719)
at java.time.LocalDateTime.format(LocalDateTime.java:1746)

如何解决这个问题?

原文由 carfield 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.6k
2 个回答

LocalDateTime 是没有时区的日期时间。您在格式中指定了时区偏移格式符号,但是, LocalDateTime 没有此类信息。这就是错误发生的原因。

如果你想要时区信息,你应该使用 ZonedDateTime

 DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyyMMdd HH:mm:ss.SSSSSS Z");
ZonedDateTime.now().format(FORMATTER);
=> "20140829 14:12:22.122000 +09"

原文由 ntalbs 发布,翻译遵循 CC BY-SA 4.0 许可协议

JSR-310 中的前缀“Local”(又名 Java-8 中的 java.time-package)并不表示该类的内部状态中存在时区信息(此处: LocalDateTime )。尽管名称经常具有误导性,但像 LocalDateTimeLocalTime 这样的类没有时区信息或偏移量

您尝试使用偏移量信息(由模式符号 Z 表示)格式化此类时间类型(不包含任何偏移量)。因此,格式化程序会尝试访问不可用的信息,并且必须抛出您观察到的异常。

解决方案:

使用具有此类偏移量或时区信息的类型。在 JSR-310 中,这是 OffsetDateTime (包含偏移量但不包含时区,包括 DST 规则)或 ZonedDateTime 。您可以通过查找方法 isSupported(TemporalField) 来查看此类类型的所有受支持字段。 .字段 OffsetSecondsOffsetDateTimeZonedDateTime --- 中受支持,但在 LocalDateTime 中不受支持

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd HH:mm:ss.SSSSSS Z");
String s = ZonedDateTime.now().format(formatter);

原文由 Meno Hochschild 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题