У меня возникла следующая проблема с использованием Joda-Time для синтаксического анализа и создания даты и времени около летнего времени (DST) часов. Вот пример (обратите внимание, что 30 марта 2008 г. - переход на летнее время в Италии):
DateTimeFormatter dtf = DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss");
DateTime x = dtf.parseDateTime("30/03/2008 03:00:00");
int h = x.getHourOfDay();
System.out.println(h);
System.out.println(x.toString("dd/MM/yyyy HH:mm:ss"));
DateTime y = x.toDateMidnight().toDateTime().plusHours(h);
System.out.println(y.getHourOfDay());
System.out.println(y.toString("dd/MM/yyyy HH:mm:ss"));
Я получаю следующий результат:
3
30/03/2008 03:00:00
4
30/03/2008 04:00:00
Когда я анализирую час, я получаю, что час равен 3. В моей структуре данных я сохраняю день, сохраняя полуночное время, а затем у меня есть какое-то значение для каждого часа дня (0-23). Затем, когда я записываю дату, я повторно вычисляю время полной даты, делая полночь плюс Час. Когда я суммирую 3 часа до моей полуночи, я получаю 04:00:00! А если еще раз разобрать, получаю часа 4!
В чем моя ошибка? Есть ли способ получить второй час при синтаксическом анализе или третий час при распечатке?
Я также пытался создать вывод вручную:
String.format("%s %02d:00:00", date.toString("dd/MM/yyyy"), h);
но в данном случае для второго часа я получаю 30/03/ 2008 02:00:00, которая не является действительной датой (поскольку час 2 не существует) и больше не может быть проанализирована.
Заранее благодарим вас за вашу помощь. Филиппо