从 SimpleTimeZone 获取 ZoneId

使用 Java,我有一个 SimpleTimeZone 实例,其中包含来自旧系统的 GMT 偏移和夏令时信息.

我想检索 ZoneId 以便能够使用 Java 8 时间 API.

实际上,toZoneId 返回一个没有夏令时信息的 ZoneId

SimpleTimeZone stz = new SimpleTimeZone( 2 * 60 * 60 * 1000,"GMT",Calendar.JANUARY,1,Calendar.FEBRUARY,1 * 60 * 60 * 1000);
stz.toZoneId();
bzl789 回答:从 SimpleTimeZone 获取 ZoneId

这里的解决方案我比较喜欢,因为它很简单,但是你需要一个 Date 和一个 TimeZone 作为参数来检索 ZoneId

private ZoneId getZoneOffsetFor(final Date date, final TimeZone timeZone){
  int offsetInMillis = getOffsetInMillis(date, timeZone);
  return ZoneOffset.ofTotalSeconds( offsetInMillis / 1000 );
}

private int getOffsetInMillis(final Date date, final TimeZone timeZone){
  int offsetInMillis = timeZone.getRawOffset();
  if(timeZone.inDaylightTime(date)){
     offsetInMillis += timeZone.getDSTSavings();
  }
  return offsetInMillis;
}

这篇关于从 SimpleTimeZone 获取 ZoneId的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持前端之家!

本文链接:https://www.f2er.com/3175504.html

大家都在问