Android 2.3.3中不可解析的日期异常在较新版本中不存在



我正在使用以下SimpleDateFormat解析日期字符串:

代码段:

SimpleDateFormat format = new SimpleDateFormat("'cappicor' yyyy-MM-dd HH:mm zz", Locale.US);
dateTime = format.parse(title)

下面是一个示例"标题"日期我收到的字符串:

"cappicor 2013-12-07 11:54 UTC"

这在许多较新的设备和Android版本中运行良好,但在带有的Android 2.3.3中失败

java.text.ParseException:无法解析日期:"cappicor 2013-12-07 11:54 UTC"

我浏览了许多与所使用的Locale相关的SO答案,甚至从String中解析出了可能的控制字符——但运气不佳。

有什么想法吗?

1.4到1.7的Java版本都没有给我这个错误,尽管事实上Android 2.3.3确实给了我这个错误。

来自ORACLE文档:

可以使用单引号(')引用文本以避免解释。"''"表示单引号

来自Android文档:

''单引号(文字)'o''clock':点钟

所以这里没有区别。但是,我注意到时区UTC引起了一个问题。将代码更改为。。。

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.US);
format.setTimeZone(TimeZone.getTimeZone("UTC"));
Date dateTime = format.parse("2013-12-07 11:54");

它是有效的。有点奇怪,因为。。。

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm zz", Locale.US);
Date dateTime = format.parse("2013-12-07 11:54 GMT");

工作也很好(与EST、PST相同),TimeZone.getAvailableIDs()返回UTCCETMET,它们都不工作。

结论:使用。。。

SimpleDateFormat format = new SimpleDateFormat("'cappicor' yyyy-MM-dd HH:mm", Locale.US);
format.setTimeZone(TimeZone.getTimeZone("UTC"));
Date dateTime = format.parse("cappicor 2013-12-07 11:54");

作为一种变通方法。

最新更新