当前位置: 首页 > 知识库问答 >
问题:

从Java8迁移到Java11时无法解析Java.time.format.DateTimeParseException

贺君浩
2023-03-14

这适用于Java8

LocalDateTime ldt = LocalDateTime.parse("4/11/17 00:00 AM", DateTimeFormatter.ofPattern("d/M/yy hh:mm[ ][a]"));

但在Java11中,我得到了

java.time.format.DateTimeParseException: Text '4/11/17 00:00 AM' could not be parsed, unparsed text found at index 14
at java.base/java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:2049)
at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1948)

共有1个答案

缪朝
2023-03-14

什么都没变。您正在提交“默认平台”代码样式错误。这是一种反模式,在这种模式中,您使用了一个损坏的方法并破坏了您的代码,但该bug几乎不可能在单元测试中找到;当大量现金和声誉岌岌可危时,您的代码最终会在生产时崩溃。“幸运的是”,您今天通过切换JDK,并幸运地发现JDK安装之间的区域设置不同,从而发现了这个bug。

我建议您和我一样不喜欢这些糟糕的方法:)这些方法假定某些参数是“您的平台作为该值的默认值所具有的任何参数”,以下三个常见的罪魁祸首依次为:

  • 字符集编码
  • 区域设置
  • 时区
LocalDateTime ldt = LocalDateTime.parse("4/11/17 00:00 AM",
  DateTimeFormatter.ofPattern("d/M/yy hh:mm[ ][a]",
  Locale.forLanguageTag("NL")));
LocalDateTime ldt = LocalDateTime.parse("4/11/17 00:00 AM",
  DateTimeFormatter.ofPattern("d/M/yy hh:mm[ ][a]",
  Locale.ENGLISH));

注意:一些非英语区域设置,如.Germane.Italy.France实际上在某种程度上正确地解析了AM,但是如上面所示,荷兰语(荷兰)是一个不起作用的例子。

 类似资料:
  • 我正在使用Android Studio3.2Beta5将我的项目迁移到AndroidX。当我重建我的应用程序时,我得到了这些错误: 错误:[TAG]无法解析变量“${animal.sniffer.version}” 错误:[TAG]无法解析变量“${junit.version}” Build.Gradle app/build.gradle

  • 我有一个用于java程序的库。 它包含下一行: 它在java8上运行正常,但在我尝试在java11上启动它之后,我得到了ClassCastException JAVAClassCastException:类jdk。内部的加载器。ClassLoaders$AppClassLoader不能强制转换为java类。网URLClassLoader 有可能解决这个pb而不修改库吗?AFAIK,Java应该向下

  • Java(TM)SE运行时环境(构建1.8.0_102-B14) Java HotSpot(TM)64位服务器VM(构建25.102-B14,混合模式) 我知道jdk11不包含jre,但是我如何在java 11中从cmd运行java程序呢

  • 问题内容: 我们的Oracle数据库遇到了严重的性能问题,我们想尝试将其迁移到基于MySQL的数据库(直接使用MySQL,或者最好是Infobright)。 问题是,在我们实际上不知道新数据库的所有功能是否符合我们的需求之前,我们需要让旧系统和新系统至少重叠数周(如果不是几个月)。 因此,这是我们的情况: Oracle数据库由多个表组成,每百万行。白天,实际上有成千上万的语句,我们无法停止迁移。

  • 问题内容: 在我的应用程序中,我从UIWebView迁移到WKWebView,如何为WKWebView重写这些功能? 和 问题答案: UIWebView => WKWebView等效 关于您可以写: 对于:

  • 考虑: 为什么,我怎么才能让它起作用? 我的CPU是i5-10210u(支持AVX-256)。在X64版本/调试中运行。