2016-09-29 76 views
0

除非我做錯了什麼...TimeZone偏移量顯示無效值

我住在波蘭(GMT + 2)。在我寫這篇文章的時候,我們處於夏令時。下面的代碼,但是,說,GMT時間偏移只有1個小時,而不是2。

Calendar mCalendar = new GregorianCalendar(); 
    TimeZone mTimeZone = mCalendar.getTimeZone(); 
    System.out.println(mTimeZone); 
    int mGMTOffset = mTimeZone.getRawOffset(); 
    System.out.printf("GMT offset is %s hours", TimeUnit.HOURS.convert(mGMTOffset, TimeUnit.MILLISECONDS)); 

打印GMT偏移1小時

同樣的情況,對於其他時區,例如紐約,這是格林尼治標準時間4:

Calendar mCalendar = new GregorianCalendar(TimeZone.getTimeZone("America/New_York")); 

打印GMT偏移量爲-5個小時

+0

檢查這裏http://stackoverflow.com/questions/10545960/how-to-tackle-daylight-savings-using-timezone-in- java的 – Karthik

回答

2

有兩種方法,你必須使用時區:

,你可以檢查的日期是在DaylightSaveTime有:

mTimeZone.inDaylightTime(date) 

如果這是真的,你要的

mTimeZone.getDSTSavings() 

值添加到偏移:

Calendar mCalendar = new GregorianCalendar(); 
TimeZone mTimeZone = mCalendar.getTimeZone(); 
System.out.println("TimeZone: "+mTimeZone); 
int mGMTOffset = mTimeZone.getRawOffset(); 
if (mTimeZone.inDaylightTime(mCalendar.getTime())){ 
    mGMTOffset += mTimeZone.getDSTSavings(); 
} 
System.out.printf("GMT offset is %s hours", 
TimeUnit.HOURS.convert(mGMTOffset, TimeUnit.MILLISECONDS)); 

輸出:

GMT offset is 2 hours 
1

檢查DST是否在java中處於活動狀態。

TimeZone tz = TimeZone.getTimeZone("America/New_York"); 
boolean inDs = tz.inDaylightTime(new Date()); 

下面的代碼給你DST時間

TimeZone zone = TimeZone.getTimeZone("America/New_York"); 
DateFormat format = DateFormat.getDateTimeInstance(); 
format.setTimeZone(zone); 

System.out.println(format.format(new Date())); 
相關問題