从SimpleTimeZone获取ZoneId [英] Getting ZoneId from a SimpleTimeZone

查看:115
本文介绍了从SimpleTimeZone获取ZoneId的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用Java,我有一个 SimpleTimeZone 实例,该实例具有GMT偏移量和来自旧系统的夏令时信息。

Using Java I have a SimpleTimeZone instance with GMT offset and daylight saving time information from a legacy system.

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

I would like to retrieve ZoneId to be able to use Java 8 time API.

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

Actually, toZoneId returns a ZoneId without the daylight Saving time infos

SimpleTimeZone stz = new SimpleTimeZone( 2 * 60 * 60 * 1000, "GMT", Calendar.JANUARY,1,1,1, Calendar.FEBRUARY,1,1,1, 1 * 60 * 60 * 1000);
stz.toZoneId();


推荐答案

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

Here the solution i prefer because it's simple, but you need a Date and a TimeZone as parameters to retrievethe the 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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆