2011-10-25 76 views
2

我想獲取設置爲GMT的日曆對象,但getTime()總是返回格林尼治標準時間+1(我當前的時間)。我曾嘗試:日曆不返回格林尼治標準時間

Calendar cal = new GregorianCalendar(TimeZone.getTimeZone("GMT")); 
Calendar cal = new GregorianCalendar(TimeZone.getTimeZone("UTC")); 
Calendar cal = new GregorianCalendar(TimeZone.getTimeZone("skeniver")); 

他們都顯然返回GMT,因爲

cal.getTimeZone().getDisplayName() 

回報 「GMT + 00:00」;但是

cal.getTime().toString(); 

始終以GMT + 1顯示時間。

有沒有人知道爲什麼會發生這種情況?

回答

0

如果你想在字符串,則比較喜歡的DateFormat或SimpleDateFormat的這個

我這裏是

SimpleDateFormat sdf = new SimpleDateFormat(); // here you can also define your format of date for e.g. "dd/MM/yyyy z" 

sdf.setTimeZone("GMT"); 

Calendar cal = Calendar.getInstance(); 
System.out.println(sdf.format(cal.getTime())); 
0

Calendar.getTime()返回Date對象。在Java中,Date只是一個從UNIX紀元開始的長時間戳的持有者。

要顯示在不同的TimeZone比默認Date,你可以使用一個SimpleDateFormat

1

您需要調整夏令時。我不確定這是否會有所幫助,但它是我用來調整世界各地當前正在使用的應用程序中UTC時區的代碼。我使用Date而不是Calendar,但它可以工作...

Date dateTimeNow = new Date(); 
TimeZone tz = TimeZone.getDefault(); 
int currentOffsetFromUTC = tz.getRawOffset() + (tz.inDaylightTime(dateTimeNow) ? tz.getDSTSavings() : 0); 
Date dateTimeNowUTC = new Date(dateTimeNow.getTime() - currentOffsetFromUTC); 
相關問題