为什么在某些设备上解析日期会抛出ArrayIndexOutOfBoundsException?

时间:2015-01-08 11:56:48

标签: date datetime java-me codenameone

我有以下字符串,表示日期和时间,符合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。但是,从Java ME SDK在Nokia 206或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

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

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

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