アプリケーションのバグを特定しようとしています。次の「なぞなぞ」の作成に成功しました。
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 で実行すると、コメントに値が表示されます(はい、本当に)。この動作は、特定の Java 実装によって異なります。
私の質問は次のとおりです。
- s1 が s2 と等しくないのはなぜですか?
- さらに重要なのは、なぜ s1 が正しくないのでしょうか?
s2
適切な時点を指していますが、そうでs1
はありません。Android の SimpleDateFormat 実装にバグがあるようです。
質問 1 への回答: BalusC による回答を参照してください。
- [使用後
SimpleDateFormat#parse
] setTimeZone の呼び出しによって以前に設定された TimeZone 値は、以降の操作のために復元する必要がある場合があります。
質問 2 への回答: wrygiel (私自身) による回答を参照してください。
- これは、Android 2.1 (API 7) のバグによるものです。