【发布时间】:2014-07-28 16:11:32
【问题描述】:
我正在尝试将山区时间转换为东部时间到格林威治标准时间。但是当我在日期字段“gmtDate”中获得最终日期时,它会回到我当地的山区日期。
这是我的问题:
- 我预计山区时间与东部时间会有 2 小时的差异。但看到的只是一小时的不同。这里有什么问题?
- 同样,东部时间与 GMT 时间应该有 6 小时的差异,但这里显示的是 5 小时的差异。怎么了?
- 最后,我尝试将日期和时间保存为 GMT,但看起来它又回到了山区时间。这里有什么问题?
这是我的最终输出:
DEBUG [main] (MyClass.java:100) - local : 2014-07-14 10:11:04 MDT
DEBUG [main] (MyClass.java:108) - est : 2014-07-14 11:11:04 EST
DEBUG [main] (MyClass.java:110) - =================================================
DEBUG [main] (MyClass.java:113) - gmt : 2014-07-14 16:11:04 GMT
DEBUG [main] (MyClass.java:125) - gmt date : Mon Jul 14 10:11:04 MDT 2014
DEBUG [main] (MyClass.java:127) - =================================================
这是我的示例代码:
private Date testTimeZone(Date date, TimeZone sourceTimeZone, TimeZone targetTimeZone) {
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
Date localdate = null;
try {
localdate = df.parse("2014-07-14 09:11:04 MST");
} catch (ParseException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
LOG.debug("local : " + df.format(localdate));
df.setTimeZone(TimeZone.getTimeZone("EST"));
LOG.debug("est : " + df.format(localdate));
LOG.debug("=================================================");
df.setTimeZone(TimeZone.getTimeZone("GMT"));
LOG.debug("gmt : " + df.format(localdate));
Date gmtDate = null;
try {
gmtDate = df.parse(df.format(localdate));
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
LOG.debug("gmt date : " + gmtDate);
LOG.debug("=================================================");
return gmtDate;
}
【问题讨论】:
-
您应该使用
"America/New_York"代表东部,"America/Denver"代表山区,"UTC"而不是 GMT。请记住,美国目前处于夏令时,仅指定"EST"并未考虑到这一点。