Java SimpleDataFormat解析后时区错误

Java SimpleDataFormat解析后时区错误,java,date,timezone,Java,Date,Timezone,为什么当我输入带有GMT时区的日期字符串时,SimpleDataFormat会解析它并输出EET时区? 输出为: 2011年10月31日星期一13:19:56 EET 而不是 2011年10月31日星期一13:19:56 GMT您正在打印Date.toString()的结果。Date没有任何时区的概念-它只是UTC Unix时代以来的毫秒数Date.toString()始终使用系统默认时区 请注意,您不应该期待“Mon Oct 31 13:19:56 GMT 2011”,因为您指定的时间指定

为什么当我输入带有GMT时区的日期字符串时,SimpleDataFormat会解析它并输出EET时区?

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

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

请注意,您不应该期待“Mon Oct 31 13:19:56 GMT 2011”,因为您指定的时间指定的GMT小时为11,而不是13

如果要使用特定时区进行打印,则应使用另一种
DateFormat
进行打印,而不是使用
Date.toString()
。(
Date.toString()
总是造成这样的混乱;这真是不幸。)

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));