我们有一个问题,我们正在接收一个在本地时间定义的时间对象 - 使用 DST。现在我们将接收时间作为无 DST 时区存储在数据库中。一年一次,我们有一个小时的转换不正确:在凌晨 2:00,时钟将在传入的 DST 时区设置为凌晨 1:00(将时间切换到冬季时间)。我们将其更正为当地时间凌晨 2 点(即格林威治标准时间)。凌晨 2 点 15 分,我们收到一个数据包,我们再次将其更正为 2 点 15 分。但现在它真的是 2:15 而不是 1:15。原则上,我们现在在系统中的时间增加了一倍。java gregorian calendar 无法在时区之间转换,并考虑当前本地时间(以确定它是否必须考虑双倍小时)。
这是我将传入 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;
}
这似乎全年都可以正常工作 - 除了唯一一个小时切换回冬季时间......关于这个心灵弯曲问题的任何想法?