Java SimpleDateFormat时区解析

我很好奇
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

它返回06/03/2013.为什么减少呢?

编辑:基本上我问的是,如果我把它设置为GMT 8,那么Java用来将我的日期恢复为6/3的参考点是什么.有一些逻辑说嘿我不在这个当前时区所以让我们改变它.但是因为我传入一个字符串,所以我看不出它在哪里.

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

最佳答案 您在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.

所有这些字符串都是同一时刻的不同表现形式.

点赞