4

我很好奇 Java 的 SimpleDateFormat 如何根据设置的时区决定何时增加/减少传入的时间。

假设我有一个日期 06/04/2013。然后我将时区设置为离我很远的一个(我在 GMT-5)。假设我使用 GMT+8。

我打电话

SimpleDateFormat df = new SimpleDateFormat( "M/d/yy" );
df.setTimeZone( TimeZone.getTimeZone( "GMT+8" ) );
df.parse( endDate ) // this returns 06/**03**/2013  //endDate is just a String

它返回 2013 年 6 月 3 日。为什么会减量?

编辑:基本上我在问如果我将它设置为 GMT+8,Java 用来将我的日期回退到 6/3 的参考点是什么。有一些逻辑说嘿我不在这个当前时区,所以让我们改变它。但是由于我传递的是一个字符串,所以我看不出它可能在哪里。

我假设默认情况下,如果我没有在字符串中提供时区,它将默认为 GMT。

4

1 回答 1

2

您在 GMT-5 中,并且正在解析一个表示 GMT+8 时区时刻的字符串。

所以,日期06/04/2013实际上是06/04/2013 00:00 GMT+8。要获得格林威治标准时间的日期,您必须减去 8 小时:06/03/2013 16:00 GMT. 要获得 GMT-5 的日期,您必须再减去 5 小时:06/03/2013 11:00 GMT-5.

所有这些字符串都是同一时刻的不同表示。

于 2013-07-10T21:31:12.753 回答