У нас есть проблема, что мы получаем объект времени, определенный по местному времени - с DST. Теперь мы сохраняем время получения в базе данных как часовой пояс без перехода на летнее время. Раз в году у нас есть один час, когда преобразование неверно: в 2:00 часы будут установлены на 1:00 в часовом поясе входящего летнего времени (переключение времени на зимнее время). Мы исправляем это на 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;
}
Кажется, это работает нормально в течение всего года, за исключением одного часа переключения обратно на зимнее время... Есть какие-нибудь идеи об этой проблеме, изнуряющей сознание?