Ошибка часового пояса SimpleDateFormat на Android

Я пытался выявить ошибку в своем приложении. Мне удалось создать следующую «загадку»:

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нет. Кажется, в реализации SimpleDateFormat для Android есть ошибка.

ОТВЕТ НА ВОПРОС 1:См. ответ BalusC:

  • [После использования SimpleDateFormat#parse] любое значение TimeZone, которое ранее было установлено вызовом setTimeZone, может потребоваться восстановить для дальнейших операций.

ОТВЕТ НА ВОПРОС 2: См. ответ wrygiel (я).

  • Это связано с ошибкой в ​​Android 2.1 (API 7).
9
задан wrygiel 17 May 2012 в 09:28
поделиться