2016-09-29 43 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())); 
相关问题