Java SimpleDateFormat не работает нормально

У меня есть странная проблема с SimpleDateFormat, проблема в том, что формат даты не анализирует дату в моем TimeZone, даже если TimeZone.getDefault() дает мне правильный TimeZone.

Если этого недостаточно, я запускаю следующее, и я получил следующие результаты (в комментарии):

SimpleDateFormat df = new SimpleDateFormat("MM/dd/yy HH:mm a");
Date now = new Date();
System.out.println(now); // Wed Jul 03 18:58:37 CDT 2013
System.out.println(df.format(now)); // 07/03/13 18:58 PM (ok)
System.out.println(df.parse("07/03/13 18:58 PM")); // Wed Jul 03 00:58:00 CDT 2013 (not ok)
System.out.println(df.parse(df.format(now))); // Wed Jul 03 00:58:00 CDT 2013

Как это возможно? Я даже не уверен, что делает метод df.parse, потому что полученный час никогда не проходит 1 AM, я имею в виду, что это было в 18:58, но теперь, когда мое время 7:32, я все равно получаю 00:32 вместо 1:32.

Я что-то упускаю? Строковые даты получены на сервере, и их формат не может быть изменен, поскольку они используются в других уже производительных службах.

Это происходит в Android-телефоне, время на телефоне установлено в порядке.

1 ответ

Хорошо, я понял, что "не прошлый 1-й день был ключом",

проблема заключается в том, что текст синтаксиса "H" используется в часах 0-23, для am-pm вы должны использовать "h" или "K",

Конечная строка формата должна быть:

"MM/dd/yy hh:mm a"

Я думаю, что Java должна отправить сообщение об ошибке или предупреждении, пытаясь проанализировать прошлое> 12 часов вместо того, чтобы просто заменить его на "00".

licensed under cc by-sa 3.0 with attribution.