时区偏移值无效



除非我做错了什么…

我住在波兰(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()));

相关内容

  • 没有找到相关文章

最新更新