【发布时间】:2012-05-24 09:10:43
【问题描述】:
我一直在尝试隔离我的应用程序中的错误。我成功地产生了以下“谜语”:
SimpleDateFormat f1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
SimpleDateFormat f2 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
Date d = f1.parse("2012-01-01T00:00:00+0700");
String s1 = f1.format(d); // 2011-12-31T18:00:00+0700
String s2 = f2.format(d); // 2011-12-31T18:00:00+0100
当我在 Android API 7 上运行此代码时,我得到了 cmets 中的值(是的,真的)。此行为取决于特定的 Java 实现。
我的问题是:
- 为什么 s1 不等于 s2?
- 更重要的是,为什么 s1 不正确?
s2指向正确的时间点,s1却没有。 Android 的 SimpleDateFormat 实现中似乎存在错误。
问题 1 的答案:查看 BalusC 的答案:
- [使用
SimpleDateFormat#parse] 之前通过调用 setTimeZone 设置的任何 TimeZone 值可能需要恢复以进行进一步操作。
问题 2 的答案:请参阅 wrygiel(我自己)的答案。
- 这是由于 Android 2.1 (API 7) 中的错误造成的。
【问题讨论】:
-
我运行了你的代码。当我运行时,两个输出都是一样的
-
我在 Android API 7 上运行。也许这很重要。我会更新描述。
-
我也运行你的代码。 s1 和 s2 是相同的 - 问题出在您的“不可见”(对我们而言)代码中。