问题描述
使用 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; }