Java преобразует местное время в время без перехода на летнее время — с непрерывностью переключения часов

У нас есть проблема, что мы получаем объект времени, определенный по местному времени - с 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;
}

Кажется, это работает нормально в течение всего года, за исключением одного часа переключения обратно на зимнее время... Есть какие-нибудь идеи об этой проблеме, изнуряющей сознание?


person Obiwan007    schedule 13.11.2012    source источник
comment
Я не понимаю проблемы. Вы разумны, сохраняя время как GTM/UTC. Имеет ли значение, какое это время было в исходном часовом поясе?   -  person Duncan Jones    schedule 13.11.2012
comment
Это звучит как проблема с неоднозначным вводом, а не с вашим кодом. Есть два разных момента времени, которые оба называются 1:15, и если во входных данных не указано, какой из них имеется в виду, у вашего кода нет надежного способа выяснить это.   -  person Wyzard    schedule 13.11.2012
comment
Возможно, это может быть полезно: http://stackoverflow.com/questions/13235191/mysql-how-to-store-time-with-correct-timezone-from-java   -  person mxns    schedule 13.11.2012