Кажется, что достаточно простая проблема - это серьезная головная боль при синтаксическом анализе даты.Тег для анализа даты с часовым поясом в Java
В моем проекте java у меня есть собственный класс анализатора даты, который обрабатывает все различные разновидности форматов строки даты, с которыми он может столкнуться.
Недавно я должен был добавить следующий случай использования:
DateFormat fileDateImport = new SimpleDateFormat("EEE, dd MMM yyyy hh:mm:ss zzz");<br />
return fileDateImport.parse(stringToParse);
Теперь я хочу, чтобы проверить эту функциональность, но у меня были проблемы, потому что дата не перевод, как я бы ожидать. Я пробовал несколько вещей, вот как выглядит мой тест (локальные настройки моих компьютеров находятся в CST).
объектDate returnDate = DateParser.parseDate("Wed, 24 Sep 2014 00:00:00 BST");
final SimpleDateFormat convertedTime = new SimpleDateFormat("ddMMyyyyhhmmss");
convertedTime.setTimeZone(TimeZone.getTimeZone("BST"));
assertEquals("24092014000000", convertedTime.format(returnDate));
returnDate читает "Tue Sep 23 18:00:00 CDT 2014", которая является то, что я бы ожидать. CST - 6 часов по сравнению с BST. Тем не менее, я не хочу проверять toString() этой даты, так как этот тест может потенциально запускаться в разных часовых поясах.
Конечный результат в формате «24092014050000». Я не уверен, как это получилось в тот момент, и он продвигается вперед на 11 часов от исходного returnDate.
Я попытался установить время возврата в объект календаря, но получаю тот же результат.
Любое немного более удобно с датами, чем у меня есть идеи?
Если вы можете использовать Java-гораздо лучше Дата модель была введена, обратите внимание на 'ZonedDateTime'. Между тем помните, что BST = GMT + 1. – Caleryn
Это хорошо, но, к сожалению, я не могу контролировать это! Наша текущая версия Java - 7. –
Не немедленное решение, но, вероятно, лучше использовать HH, а не hh. вы можете обнаружить, что это не 5 часов вечера. И попробуйте вывести зоны (Z), чтобы помочь вам разобраться в происходящем. – Caleryn