Java SimpleDataFormat解析后时区错误
为什么当我输入带有GMT时区的日期字符串时,SimpleDataFormat会解析它并输出EET时区?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”,因为您指定的时间指定
输出为:
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));