除非我做错了...
我住在波兰(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小时
最佳答案
您必须使用两种方法来使用TimeZone:
您可以使用以下方法检查日期是否在DaylightSaveTime中:
mTimeZone.inDaylightTime(date)
如果这是True,则必须添加
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