2014-04-09 29 views
2

我想了解,對象的getTimeInMillis()方法在Java中。瞭解XMLGregorianCalendar/GregorianCalendar時間(以毫秒爲單位)

考慮下面

 XMLGregorianCalendar cal = DatatypeFactory.newInstance().newXMLGregorianCalendar("2014-01-19T00:00:00.000-00:00"); 
     XMLGregorianCalendar cal1 = DatatypeFactory.newInstance().newXMLGregorianCalendar("2014-01-19T00:00:00.000+04:30"); 
     System.out.println(cal.toGregorianCalendar().getTimeInMillis()); 
     System.out.println(cal1.toGregorianCalendar().getTimeInMillis()); 

代碼段的輸出是如下

1390089600000 
1390073400000 

這是我的引起混淆。如果看到輸入時間2014-01-19T00:00:00.000-00:002014-01-19T00:00:00.000+04:30,則它們指的是相同的時間。因此,應該由getTimeInMillis()返回的UTC時間應該是相同的,但是您看到有所不同。在這種情況下的差異是以毫秒錶示的4.5小時,這是第二個時間字符串中的時區偏移量。

不知道我的理解出錯的地方。

+0

輸入時間是怎樣的?我錯過了什麼? –

+1

你的陳述「他們指的是同一個實例」令人困惑,因爲你有兩個不同的實例:cal和cal1。 –

+0

將其更改爲表示我的意思,「同一時刻」。格林威治標準時間的午夜時間和格林威治標準時間前4.30小時的時區是同一時刻,或者至少這是我的理解... – mihirg

回答

1

如果偏移量是+00:00那麼它是UTC時間。

如果偏移量不同,例如+04:30,則必須從本地時間(偏移部分之前的左側部分)減去此偏移量以獲取UTC時間。

最後在相同的當地時間,但不同的偏移量,你得到不同的UTC時間!通用公式爲:

UTC + offset = (local time) 
相關問題