【发布时间】:2014-12-23 08:48:40
【问题描述】:
我的理解是 PST 与 GMT / UTC 相差 8 小时。但是,当我打印出来时,我发现只有 7 小时的差异。你能解释一下我在这里做错了什么吗?
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S");
Date date = sdf1.parse("2014-05-01 13:31:03.7");
SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd_HHmmssS");
df.setTimeZone(TimeZone.getTimeZone("PST"));
System.out.println(df.format(date));
df.setTimeZone(TimeZone.getTimeZone("GMT"));
System.out.println(df.format(date));
df.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println(df.format(date));
打印:
20140501_1331037
20140501_2031037
20140501_2031037
【问题讨论】:
-
避免使用 3 或 4 个字母的时区代码。这些代码既不是标准化的也不是唯一的。使用proper time zone names。这些名称大多是大陆、斜线和城市或地区的组合。对于美国西海岸,
America/Los_Angeles。对于加拿大东部,America/Montreal. -
如果您使用 Joda-Time 或 java.time 而不是 java.util.Date/.Calendar,则处理时区会容易得多。
-
为了记录,我正在转换我的代码以使用上面建议的 Joda Time。
-
您不会后悔学习 Joda-Time 的投资。我添加了an answer 以帮助您解决此问题的问题。
标签: java timezone simpledateformat