字符z
应该能够解析"UTC"
(在大多数Locale
s中),因为UTC被认为是java.time
中的time-zone ID和time-zone name.VV
可以解析time-zone ids,z
可以根据JavaDocs of java.time.DateTimeFormatter
解析time-zone-names,下面是文档的相关部分:
Symbol Meaning Presentation Examples
------ ------- ------------ -------
(…)
V time-zone ID zone-id America/Los_Angeles; Z; -08:30
z time-zone name zone-name Pacific Standard Time; PST
(…)
这意味着您可以使用字符V
来解析它,而无需向DateTimeFormatter
提供特定的Locale
.您必须放置其中两个(VV
),否则您将得到一个漂亮的IllegalArgumentException
,并显示以下消息:
java.lang.IllegalArgumentException: Pattern letter count must be 2: V
如果您仍然想使用z
,请提供Locale
,其中UTC
是Universal Time Coordinated的缩写,Central European Summer Time是在不同Locale
之间发生变化的缩写,例如.
Other Locale
s might have different abbreviations, which makes me wonder if your Locale
actually even has a different one for UTC
.
Provide Locale.ENGLISH
, for example and it should parse successfully.
无论如何,您应该提供一个,因为如果不提供,DateTimeFormatter
将隐式使用(Java虚拟机)的默认Locale
.
因此,您可以try 以下方法:
DateTimeFormatter format = DateTimeFormatter.ofPattern("uuuu-MM-ddVVHH:mm");
或者这个:
DateTimeFormatter format = DateTimeFormatter.ofPattern("uuuu-MM-ddzHH:mm", Locale.ENGLISH);
两者都应该能够在一天中的几个小时内解析"2022-05-24UTC12:15"
到if you use 101 instead of 102这样的输入(hh
=12h格式,HH
=24h格式).