猿问

在测试环境中解析异常,而在 Android 环境中工作正常

我在 Android 中有一个非常简单的指令:

new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZZZ").parse("2019-07-24T21:27:09+02:00")

相同的指令在真实设备上运行时会生成正确的输出:一个 Date 对象,可以表示为Wed Jul 24 21:27:09 GMT+02:00 2019

但是,当我在单元测试(使用 junit)中使用完全相同的指令时,它会给我 java.text.ParseException.

我可以让它工作删除最后一个: (像这样,“2019-07-24T21:27:09+0200”),但我想知道为什么。我知道他们使用不同的 JVM,但使用的 Android API 应该是相同的。


千巷猫影
浏览 108回答 2
2回答

肥皂起泡泡

实施各不相同我可以删除最后一个:(像这样,“2019-07-24T21:27:09+0200”),但我想知道为什么。我知道他们使用不同的 JVM,但使用的 Android API 应该是相同的。SimpleDateFormat(a) &的行为Date没有实际意义,因为您不应再使用这些类。他们真的那么糟糕。(b) 在任何复杂的框架中,您可能会在实现之间看到这种细微的差异,尤其是当由不同的团队构建时。遗留日期时间类的规范不包括诸如偏移量上的可选冒号之类的微小细节。这就是人生。我希望您会发现java.time和ThreeTen-Backport的行为差异要小得多,因为它们都是由同一个人 Stephen Colebourne 领导的。我不知道与 Android 26 及更高版本捆绑在一起的java.time的 Android 实现,但我还没有听说过任何差异。因此,出于这个原因以及许多其他原因,我强烈建议使用java.time路线。

桃花长相依

Android 上的一些Java 类的实现与Oracle 的JDK 不同。这可能是由于最近针对谷歌的诉讼。因此,某些 Java API(主要是国际化和...日期格式)可能表现不同。如果该类的文档没有说明这是一种有效格式,您可以提交错误。
随时随地看视频慕课网APP

相关分类

Java
我要回答