为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

千巷猫影 2023-04-19 10:32:23
我在 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 应该是相同的。
查看完整描述

2 回答

?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

实施各不相同

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

SimpleDateFormat(a) &的行为Date没有实际意义,因为您不应再使用这些类。他们真的那么糟糕。

(b) 在任何复杂的框架中,您可能会在实现之间看到这种细微的差异,尤其是当由不同的团队构建时。遗留日期时间类的规范不包括诸如偏移量上的可选冒号之类的微小细节。这就是人生。

我希望您会发现java.timeThreeTen-Backport的行为差异要小得多,因为它们都是由同一个人 Stephen Colebourne 领导的。我不知道与 Android 26 及更高版本捆绑在一起的java.time的 Android 实现,但我还没有听说过任何差异。

因此,出于这个原因以及许多其他原因,我强烈建议使用java.time路线。

查看完整回答
反对 回复 2023-04-19
?
桃花长相依

TA贡献1860条经验 获得超8个赞

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



查看完整回答
反对 回复 2023-04-19
  • 2 回答
  • 0 关注
  • 107 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信