2012-03-26 161 views
11

我有以下代碼,我的目標是以毫秒爲單位返回GMT+0時間。但爲什麼我總是得到我當地的時區millisec?Java:時區爲什麼不同的時區給予相同的毫秒數值

Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT")); 
Calendar cal2 = Calendar.getInstance(); 
System.out.println("Time zone id is:"+cal.getTimeZone().getID()+";time in millisec:"+cal.getTimeInMillis()); 
System.out.println("Time zone id is:"+cal2.getTimeZone().getID()+";time in millisec:"+cal2.getTimeInMillis()); 

輸出爲
時區ID是:GMT,時間在毫秒:1332740915154
時區ID是:歐洲/赫爾辛基;時間在毫秒:1332740915154

爲什麼不同的時區給予以毫秒爲單位的相同值?
我想如果它是GMT+0那麼它應該是以毫秒爲單位與當地時區不同的值。

+0

你係統中的時區是什麼? – sgowd 2012-03-26 05:55:53

+0

什麼System.currentTimeMillis();? – user84592 2012-03-26 06:11:47

+0

我的時區是格林威治標準時間+2,夏令時 – user84592 2012-03-26 06:12:44

回答

21

爲什麼不同的時區會給出以毫秒爲單位的相同值?

因爲這就是它的意味着要做。從文檔:

(返回)當前時間爲從紀元UTC UTC毫秒。

換句話說,這是這將是由getTime返回Date的價值 - 它不依賴於時區。如果你想這取決於時區值,使用Calendar.Get(Calendar.YEAR)

代表即時在時間上的日曆,這是獨立於時區和日曆系統內的兩個Calendar.getTime()Calendar.getTimeInMillis()返回值。

+0

我的疑問是時區給出了毫秒還是隻給出了請求的時區? – sgowd 2012-03-26 06:00:44

+0

@ sans481:我不知道你在問什麼,我害怕 - 你能重述一下這個問題嗎? – 2012-03-26 06:01:11

+0

我沒有得到確切的結果,「當前時間爲從時代開始的UTC毫秒數」。 – sgowd 2012-03-26 06:05:42

6

Date對象的millisecJava僅僅是GMT+0 1970/01/01 00:00:00以來的毫秒數。它獨立於時區。時區是將日期格式化爲可讀字符串的屬性。

+0

這不是真正的時區;這更像是日曆的用途。時區將在UTC和本地時間之間進行轉換。 – 2012-03-26 06:01:48

1

getTimeInMillis()方法返回當前時間,距離紀元爲UTC毫秒。所以,即使兩個日曆對象具有不同的時區,您也會得到相同的毫秒數。

相關問題