2013-07-10 158 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同一時刻 –