SimpleDateFormat
解析在JUnit测试(Robolectric测试运行器)中工作,但如果在设备上运行则失败。
@Test
public void testDateParse() throws ParseException {
String datetime = "Wed Sep 03 12:59:27 BST 2014";
new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.ENGLISH)
.parse(datetime);
}
当设备发生故障时,异常显示:
java.text.ParseException: Unparseable date: "Wed Sep 03 12:59:27 BST 2014" (at offset 20)
偏移量20是B
的{{1}},因此与时区相关。
确实BST
有效:"GMT"
答案 0 :(得分:2)
我想这里有趣的问题是为什么在Robolectric上运行正常但是无法在Android测试中运行。
Robo在JVM上运行,并且在Android和良好的ol'之间进行时区解析的行为存在差异。 Java的。
除了特殊情况" UTC"和" GMT" (在此上下文中同义,两者都对应于UTC),Android不支持Java 1.1中使用的已弃用的三字母时区ID。
TimeZone的ID,可以是缩写,例如" PST",全名,例如" America / Los_Angeles",或自定义ID,例如" GMT -8:00&#34 ;.请注意,缩写的支持仅适用于JDK 1.1.x兼容性,应使用全名。
所以答案是不应该使用3个字母的缩写(因为它们不明确),但出于兼容性原因可以在JVM上使用 ,但不能在Android上使用。