Java SimpleDateFormat неправильный часовой пояс после синтаксического анализа

почему, когда я даю строку даты ввода с часовым поясом GMT, SimpleDateFormat анализирует ее и выводит часовой пояс EET?

public static String DATE_FORMAT="dd MMM yyyy hh:mm:ss z";
public static String CURRENT_DATE_STRING ="31 October 2011 11:19:56 GMT";
SimpleDateFormat simpleDateFormat =  new SimpleDateFormat(DATE_FORMAT, Locale.US);
     simpleDateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
     System.out.println(simpleDateFormat.parseObject(CURRENT_DATE_STRING));

и выход: Пн 31 окт 13:19: 56 EET 2011 вместо того чтобы Пн 31 октября 13:19: 56 GMT 2011

1 ответов


вы распечатываете результат Date.toString(). А Date не имеет никакого понятия о часовом поясе - это просто количество миллисекунд с эпохи UTC Unix. Date.toString() всегда использует системный часовой пояс по умолчанию.

обратите внимание, что вы не должны ожидать "Пн 31 октября 13:19:56 GMT 2011", учитывая, что вы дали время, которое указывает GMT час 11, а не 13.

если вы хотите использовать определенный часовой пояс для печати, вы должны использовать другой DateFormat для печати, а не с помощью Date.toString(). (Date.toString() продолжает вызывать путаницу, как это; это действительно неудачно.)