Попробуйте удалить доли секунды из строки формата. Я просто столкнулся с той же проблемой, но с немного другим форматом. Мой формат ввода не был в формате ISO (без «T» и «Z»), но симптом был тот же - время было отключено на случайное количество минут и секунд, но все остальное было в порядке. Вот как выглядели результаты моего журнала:
При использовании дробного второго формата:
SimpleDateFormat dateFormater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSS");
# Parsed date: 2011-05-27 17:11:15.271816 => Fri May 27 17:15:46 EDT 2011
# Parsed date: 2011-05-27 17:09:37.750343 => Fri May 27 17:22:07 EDT 2011
# Parsed date: 2011-05-27 17:05:55.182921 => Fri May 27 17:08:57 EDT 2011
# Parsed date: 2011-05-27 16:55:05.69092 => Fri May 27 16:56:14 EDT 2011
# Parsed date: 2011-05-27 16:38:35.50348 => Fri May 27 16:39:25 EDT 2011
Я исправил это, удалив дробные секунды из формата.
SimpleDateFormat dateFormater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
# Parsed date: 2011-05-27 17:11:15.271816 => Fri May 27 17:11:15 EDT 2011
# Parsed date: 2011-05-27 17:09:37.750343 => Fri May 27 17:09:37 EDT 2011
# Parsed date: 2011-05-27 17:05:55.182921 => Fri May 27 17:05:55 EDT 2011
# Parsed date: 2011-05-27 16:55:05.69092 => Fri May 27 16:55:05 EDT 2011
# Parsed date: 2011-05-27 16:38:35.50348 => Fri May 27 16:38:35 EDT 2011
Я думаю, что происходит из-за того, что моя часть «дробных секунд» входной строки слишком длинная (то же самое верно и в примере с OP). Кажется, он ожидает только три десятичных знака. Если вы делаете математику (возьмите первый пример):
- доли секунды = 0,271816 секунды
- DateFormat видит
271816 / 1000
секунды
- 271816/1000 == 271 секунда
- 271/60 = 4 минуты
- 271% 60 = 31 секунда
- 17: 11: 15–17: 15: 46 ровно через 4 минуты с перерывом в 31 секунду