【问题标题】:Why does parsing a date on some devices throw an ArrayIndexOutOfBoundsException?为什么在某些设备上解析日期会引发 ArrayIndexOutOfBoundsException?
【发布时间】:2015-03-06 12:53:39
【问题描述】:

我有以下字符串,代表日期和时间,符合 ISO 8601:

2014-03-11T11:57:15+0000

我正在使用 Codename One SimpleDateFormat 类将该字符串解析为一个 Date 对象,然后填充一个 Calendar 对象:

Calendar calendar = Calendar.getInstance();
SimpleDateFormat format = new SimpleDateFormat(DateTimeFormats.ISO_8601);
Date date = format.parse("2014-03-11T11:57:15+0000");
calendar.setTime(date);

DateFormats.ISO_8601 定义为

yyyy-MM-dd'T'HH:mm:ssZ

在 Codename One 模拟器上,此代码正确解析字符串并使用正确的值设置日期。这也适用于诺基亚 C1-01。但是,在诺基亚 206 或 Java ME SDK 的 DefaultCldcPhone1 模拟器上运行相同的代码会导致调用 format.parse 时出现 ArrayIndexOutOfBounds 异常。超出此范围的堆栈跟踪被混淆:

java.lang.ArrayIndexOutOfBoundsException
- java.util.Calendar.get(), bci=98
- al.a(), bci=3
- al.a(), bci=18
- al.parse(), bci=1013

有谁知道为什么会发生这种情况,我可以如何防止它,或者建议一种解决方法来从字符串填充日历而无需编写自己的解析器?

非常感谢任何帮助!

【问题讨论】:

    标签: date datetime java-me codenameone


    【解决方案1】:

    我们建议使用com.codename1.l10n.SimpleDateFormat 类而不是java.text 包中的类。这将允许您在模拟器上重现问题并更准确地对其进行调试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-26
      • 1970-01-01
      • 1970-01-01
      • 2018-07-17
      • 2021-12-22
      • 2016-01-25
      • 2018-02-20
      • 1970-01-01
      相关资源
      最近更新 更多