除非我做错了什么…
我住在波兰(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小时
对于其他时区也是如此,例如纽约,它是GMT-4:
Calendar mCalendar = new GregorianCalendar(TimeZone.getTimeZone("America/New_York"));
打印GMT偏移量为-5小时
您必须使用两种TimeZone方法:
你可以检查日期是否在DaylightSaveTime中:
mTimeZone.inDaylightTime(date)
如果这是True你必须加上
的值mTimeZone.getDSTSavings()
到Offset:
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
检查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()));