为什么:当我输入带有 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));
输出是:
Mon Oct 31 13:19:56 EET 2011
而不是
Mon Oct 31 13:19:56 GMT 2011
最佳答案
您正在打印 Date.toString()
的结果。 Date
没有任何时区的概念 - 它只是自 UTC Unix 纪元以来的毫秒数。 Date.toString()
始终 使用系统默认时区。
请注意,您不应期待“Mon Oct 31 13:19:56 GMT 2011”,因为您指定的 GMT 时间是 11 点,而不是 13 点。
如果要使用特定时区进行打印,则应使用另一个DateFormat
进行打印,而不是使用Date.toString()
。 (Date.toString()
一直造成这样的困惑;这真的很不幸。)
关于Java SimpleDateFormat 解析后时区错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7952686/