2013-07-10 123 views
4

我很好奇Java的SimpleDateFormat如何根据它设置的时区来决定何时递增/递减传入时间。Java SimpleDateFormat时区解析

比方说,我有一个日期06/04/2013。然后我把时区设置为离我很远(我在格林威治标准时间-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。

回答

2

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

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

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

+0

我以为他试过格林威治标准时间-5,它显示为第四,然后他试着格林威治标准时间+8,它显示为第三。 – jdero

+0

所以你说默认情况下,SimpleDateFormat假定我想在格林尼治标准时间的日期,而不是我传入的时区? –

+0

不,我刚刚说过,通过将日期格式的时区设置为GMT + 8,您将它解析为06/04/2013,格式为06/04/2013 GMT + 8,与06/03相同/ 2013 16:00 GMT,与06/03/2013 11:00 GMT-5同一时刻 –