使用SimpleDateFormat解析时区不一致

时间:2013-03-21 16:39:50

标签: java android

我正在尝试使用SimpleDateFormat来解析与时区解析的一些不一致性,这里是日期格式,我正在用来解析:

static private final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd, h:mmaa zzz", Locale.US);

要解析的日期字符串:

  

2013-03-20,美国东部时间下午3:36

三星解析失败,2.3.5适用于HTC 4.0.4和HTC 2.3.3。

以下是一些解析测试的输出:

HTC 4.0.4:

Test : 2013-03-20, 3:36PM EST : Wed Mar 20 21:36:00 CET 2013 : lenient : true
Test : 2013-03-20, 3:36PM EDT : Wed Mar 20 20:36:00 CET 2013 : lenient : true
Test : 2013-03-20, 3:36PM EST : Wed Mar 20 21:36:00 CET 2013 : lenient : false
Test : 2013-03-20, 3:36PM EDT : Wed Mar 20 20:36:00 CET 2013 : lenient : false

HTC 2.3.3:

Test : 2013-03-20, 3:36PM EST : Wed Mar 20 21:36:00 GMT+01:00 2013 : lenient : true
Test : 2013-03-20, 3:36PM EDT : Wed Mar 20 20:36:00 GMT+01:00 2013 : lenient : true
Test : 2013-03-20, 3:36PM EST : Wed Mar 20 21:36:00 GMT+01:00 2013 : lenient : false
Test : 2013-03-20, 3:36PM EDT : Wed Mar 20 20:36:00 GMT+01:00 2013 : lenient : false

三星2.3.5:

Test : 2013-03-20, 3:36PM EST : Wed Mar 20 21:36:00 GMT+01:00 2013 : lenient : true
Test : 2013-03-20, 3:36PM EST : Wed Mar 20 21:36:00 GMT+01:00 2013 : lenient : false

其他解析在三星上失败。

有人可以解释这种行为吗?

3 个答案:

答案 0 :(得分:1)

不了解android,但在java中,您可以使用:java.lang.System.getProperties()

获取系统属性

答案 1 :(得分:1)

目前Android上没有可用的JDK。

查看SimpleDateFormat的引用,只有一个版本。所以无论在任何Android操作系统级别上工作,都应该适用于所有级别 SimpleDateFormat的不稳定性很可能是由于不同设备上的locale不同。修复它使用一个区域设置而不是使用设备的默认区域设置。

new SimpleDateFormat(dataFormat,Locale.US);

答案 2 :(得分:0)

我在三星Galaxy 7平板电脑上遇到了类似的问题。

“EDT”不在TimeZone.getAvailableIDs()返回的列表中,因此使用“z”的SimpleDateFormat不起作用。

我将创建一个TZ缩写的哈希表,并将代码转换为+ = offset。

难以置信,真的......