我在解析ZonedDateTime时遇到问题:

DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-ddzhh:mm");
ZonedDateTime.parse(s, formatter);

这将导致错误:

java.time.format.DateTimeParseException:
    Text '2022-05-24UTC12:15' could not be parsed at index 10

这个代码有什么问题?

推荐答案

字符z应该能够解析"UTC"(在大多数Locales中),因为UTC被认为是java.time中的time-zone IDtime-zone name.VV可以解析time-zone idsz可以根据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,其中UTCUniversal Time Coordinated的缩写,Central European Summer Time是在不同Locale之间发生变化的缩写,例如.

  • 英语:CEST
  • 德语:MESZ

Other Locales 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格式).

Java相关问答推荐

在Java中使用带限制的回归打印星形三角形

有没有方法可以修复错误错误:无法初始化主类code_editor?

将状态栏和导航栏设置为白色,带有深色文本

为什么如果数组列表中有重复项,我的代码SOMETIMES不返回true?

在AnyLogic中增加变量计数

屏蔽字母数字代码的Java正则表达式

如何在带有Micronaut的YAML中使用包含特殊字符的字符串作为键

如何创建一个2d自上而下的移动系统,其中移动,同时持有两个关键是可能的处理?

JPanel透支重叠的JComcoBox

暂停计时器

为什么使用JDK21获取锁定锁比使用JDK11慢

每次FXMLLoader调用ApplationConext.getBean(类)时创建@Component的新实例

try 在Android Studio中的infoWindow中使用EditText(Java)

Java中不兼容的泛型类型

如何在Jooq中获取临时表列引用?

为什么StandardOpenOption.CREATE不能通过Ubuntu在中小企业上运行?

如何生成指定范围内的11位序列号?

无限递归Java问题

将@Transactional添加到Spring框架中链下的每个方法会产生什么效果?

始终使用Spring Boot连接mongodb上的测试数据库