Java 8的DateTimeFormatter无法解析"Etc/GMT"时区

3

我正在尝试使用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"在列表中(从技术上讲,在Set中)。

有什么想法吗?


1
使用 "yyyy-MM-dd HH:mm:ss VV" - Andreas
太快了!谢谢你!你能把它发布为答案吗? - Alexander
1
这个问题对其他人来说是无用的。DateTimeFormatter 的 Javadoc 已经展示了 V 是匹配命名时区的格式字符,而不是 z。只需删除该问题即可。 - Andreas
好吧,我想我是唯一一个可以在这种事情上浪费几个小时的人了... - Alexander
1
@Andreas - 我认为这值得写成一个答案。 - Matt Johnson-Pint
1个回答

5
使用 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模式将格式化/解析区域标识符,例如America/Los_AngelesEtc/GMT,而z模式仅格式化/解析区域名称。

V模式必须至少为2个字符长度,即VV


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接