DateFormat.parse()
НЕ является запросом (что-то, что возвращает значение и не меняет состояние системы). Это команда, которая имеет побочный эффект обновления внутреннего Calendar
объекта. После вызова parse()
вы должны получить доступ к часовому поясу, либо набрав DateFormat
Calendar
, либо позвонив по номеру DateFormat.getTimeZone()
. Если вы не хотите выбросить исходный часовой пояс и использовать местное время, не используйте возвращенное значение Date
из parse()
. Вместо этого используйте объект календаря после разбора. И то же самое верно для метода форматирования. Если вы собираетесь отформатировать дату, перед вызовом format()
передайте календарь с информацией о часовом поясе в объект DateFormat
. Вот как вы можете преобразовать один формат в другой, сохранив исходный часовой пояс:
DateFormat originalDateFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy");
DateFormat targetDateFormat = new SimpleDateFormat("EEE., MMM. dd, yyyy");
originalDateFormat.parse(origDateString);
targetDateFormat.setCalendar(originalDateFormat.getCalendar());
return targetDateFormat.format(targetDateFormat.getCalendar().getTime());
Это грязно, но необходимо, поскольку parse()
не возвращает значение, которое сохраняет часовой пояс, а format()
не принимает значение, которое определяет часовой пояс (класс Date
).