Java SimpleDateFormat解析后的时区错误

Igo*_*Diy 6 java timezone date

为什么当我给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));
Run Code Online (Sandbox Code Playgroud)

输出为:2011年10月31日13:19:56 EET 2011而不是2011年10月31日星期一13:19:56 GMT

Jon*_*eet 10

你正在打印出结果Date.toString().A Date没有任何时区概念 - 它只是UTC Unix纪元以来的毫秒数.Date.toString() 始终使用系统默认时区.

请注意,你不应该期待"格林威治标准时间2011年10月31日13:19:56",因为你给出的时间指定格林尼治标准时间为11,而不是13.

如果要使用特定时区进行打印,则应使用其他时区进行DateFormat打印,而不是使用Date.toString().(这样Date.toString()会造成混乱;这真的很不幸.)