deH*_*aar 6

该字符z应该能够解析"UTC"(在大多数Locales 中),因为UTC被认为是时区 ID和时区名称java.timeAVV可以解析时区 ID,同时z可以根据JavaDocs解析时区名称,这是文档的相关部分:java.time.DateTimeFormatter

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而无需为Locale您的DateTimeFormatter. 您将不得不放置其中两个 ( VV) ,否则您将收到IllegalArgumentException以下消息:

java.lang.IllegalArgumentException: Pattern letter count must be 2: V

如果您仍然想使用z,请提供一个Locale考虑Universal Time CoordinatedUTC的缩写,Central European Summer Time是一个在不同 s 之间肯定会发生变化的缩写,例如Locale

英语:CEST 德语: MESZ

其他Locales 可能有不同的缩写,这让我想知道你是否Locale真的有不同的UTC.
提供Locale.ENGLISH,例如,它应该成功解析。

无论如何,您都应该提供一个,因为如果您不这样做,DateTimeFormatter它将隐式使用Locale您的(Java 虚拟)机器的默认值。

所以你可以试试这个:

DateTimeFormatter format = DateTimeFormatter.ofPattern("uuuu-MM-ddVVHH:mm");

或这个:

DateTimeFormatter format = DateTimeFormatter.ofPattern("uuuu-MM-ddzHH:mm", Locale.ENGLISH);

"2022-05-24UTC12:15" 如果您使用HH而不是hh一天中的几个小时(hh= 12h 格式,HH= 24h 格式) ,两者都应该能够解析输入。

@FrancMo 当心 2-4 个字母的伪时区,例如 `CET`、`CEST`、`CST`、`IST`。这些不是实时时区,没有标准化,甚至不是唯一的!它们应该只用于向用户展示,绝不能用于数据交换。 (2认同) @FrancMo 当你收到这样一个带有`IST`的字符串时,你怎么知道它是指印度标准时间还是爱尔兰标准时间?如果您收到一个带有 `CST` 的字符串,您如何知道它是指中央标准时间还是@*-*@标准时间? (2认同)

更多推荐

格式,异常,模式,ZonedDateTime