【问题标题】:Java 8 DateTimeFormatter can not parse "Etc/GMT" time zoneJava 8 DateTimeFormatter 无法解析“Etc/GMT”时区
【发布时间】:2017-08-31 18:01:29
【问题描述】:

我正在尝试使用 java.time.format.DateTimeFormatter 来解析诸如“2017-04-03 19:16:19 Etc/GMT”之类的日期并获取java.time.format.DateTimeParseException: Text '2017-04-03 19:16:19 Etc/GMT' could not be parsed at index 20

这是我的格式化程序的初始化方式:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss zzz");

同时,如果日期如下:“2017-04-03 19:16:19 Etc/UTC”,一切正常。

我检查了java.time.ZoneId.getAvailableZoneIds() - 字符串“Etc/GMT”在列表中(技术上,在集合中)。

有什么想法吗?

【问题讨论】:

  • 使用"yyyy-MM-dd HH:mm:ss VV"
  • 这很快!谢谢!您可以将其发布为答案吗?
  • 问题对其他人无用。 Javadoc of DateTimeFormatter 已经表明 V 是匹配命名时区的格式字母,而不是 z。只需删除问题。
  • 好吧,我想我是唯一一个可以在这样的事情上浪费几个小时的人......
  • @Andreas - 恕我直言,这值得回答。

标签: java parsing java-8 timezone


【解决方案1】:

使用DateTimeFormatter 模式"yyyy-MM-dd HH:mm:ss VV"

V       time-zone ID                zone-id           America/Los_Angeles; Z; -08:30
z       time-zone name              zone-name         Pacific Standard Time; PST

如您所见,V 模式将格式化/解析区域 ID,例如 America/Los_AngelesEtc/GMT,而 z 模式仅格式化/解析区域名称。

V 模式的长度必须至少为 2,即VV

【讨论】:

    猜你喜欢
    • 2018-12-13
    • 2011-05-28
    • 2015-01-06
    • 2016-09-12
    • 1970-01-01
    • 2019-04-04
    • 2014-06-12
    • 2017-02-05
    相关资源
    最近更新 更多