2012-07-05 84 views
13

如果我創建一個新的Date()對象。它將打印的默認時區是什麼?什麼是java.util.Date中的默認時區

我有我的機器在GMT運行。我正在創建一個新的Date()對象。如果我打印它爲什麼顯示Thu Jul 05 08:21:05 PKT 2012.如何將時區當作PKT?

+1

可以嘗試一下這個鏈接http://stackoverflow.com/q/2891361/1465828 – Aprian

+0

謝謝。但它不回答我的問題 – user1182253

+0

根據其他語言我知道它應該是UTC,因爲至少在Python和Objective-C日期存儲此默認時區。 –

回答

18

日期本身沒有任何時區。它toString()方法使用當前的默認時區,返回表示此日期的字符串:

Date date = new Date(); 

System.out.println(TimeZone.getDefault()); 
System.out.println(date); 

TimeZone.setDefault(TimeZone.getTimeZone("UTC")); 

System.out.println(TimeZone.getDefault()); 
System.out.println(date); 

執行上面的代碼在我的機器導致了以下的輸出:通常

sun.util.calendar.ZoneInfo[id="Europe/Paris",offset=3600000,dstSavings=3600000,useDaylight=true,transitions=184,lastRule=java.util.SimpleTimeZone[id=Europe/Paris,offset=3600000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,startMonth=2,startDay=-1,startDayOfWeek=1,startTime=3600000,startTimeMode=2,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTime=3600000,endTimeMode=2]] 
Fri Jul 06 09:24:45 CEST 2012 
sun.util.calendar.ZoneInfo[id="UTC",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null] 
Fri Jul 06 07:24:45 UTC 2012 
+0

在eclipse中,一個java.lang.date顯示一個cdate.zoneInfo對象。它可能無法從我的pov訪問日期有一個相關的時區。這在轉換到不同的時區時起着至關重要的作用。在不知道源時區的情況下,不可能進行轉換。你能否談談「沒有時區問題?」 –

+0

@ThomasS「沒有時區問題」 - >首先,文檔說:... Date類旨在反映協調世界時(UTC)... –

3

那麼實際上基本日期時間是時區不可知的,他們不存儲時區。要使用時區,請使用格式化程序,日曆等。當然,基本日期必須位於默認時區,無論它是什麼(通常是GMT),否則您將無法從基本日期實例創建本地日期。

在你的特殊情況下,它將有助於查看a)javadocs和b)到類本身,因爲JDK通常分佈在java.util.Date的源代碼中。根據javadoc,java.util.Date類表示自標準基準時間以來的毫秒數,該時間被稱爲「時代」,即1970年1月1日00:00:00 GMT。

如果它在您的機器上打印時顯示不同的日期,這是因爲您的系統將使用您系統的時區默認值打印它。但是,您可以使用任何其他時區自行打印。

3

如果你在linux下運行,系統中某處有一些神奇的時區文件。對於我的Gentoo魔術剛剛創建的內容

Europe/Berlin 

有趣的是,date了正確的時間和時區(CEST)所有的時間,但Java送我到Greenwhich一個文本文件/ etc /時區。

> date 
Thu Sep 18 08:49:14 CEST 2014