我正在使用以下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()
返回UTC
、CET
和MET
,它们都不工作。
结论:使用。。。
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");
作为一种变通方法。