我们遇到的问题是,我们正在接收当地时间定义的时间对象 - 使用DST。 现在,我们将接收时间作为无DST时区存储在数据库中。 一年一次,我们有一个小时的转换不正确: 在凌晨2:00,时钟将在进入的DST时区设置为凌晨1:00(切换到冬季时间)。 我们在当地时间(即GMT)纠正到凌晨2点。 凌晨2:15我们收到一个数据包,我们再次纠正到2:15。但现在真的是2:15而不是1:15。 原则上我们现在在系统中加倍了。 java格里高利历不能在时区之间进行转换,并计算当前的本地时间(以确定它是否必须考虑到加倍的小时)。
这是我将传入的DST时区转换为非DST时区的代码:
public static GregorianCalendar getCal(XMLGregorianCalendar c)
{
GregorianCalendar toGregorianCalendar = c.toGregorianCalendar();
TimeZone tz = TimeZone.getTimeZone("GMT+1");
toGregorianCalendar.setTimeZone(tz);
toGregorianCalendar.setTimeZone(TimeZone.getTimeZone("Europe/Berlin"));
return toGregorianCalendar;
}
这一年似乎全部工作正常 - 除了转换回冬季时间...... 关于这种心灵弯曲问题的任何想法?