Java, добавление минут к дате, странная аномалия - PullRequest
12 голосов
/ 13 ноября 2008

С Java версии 1.5.0_06 в Windows и Ubuntu Linux:

Всякий раз, когда я добавляю минуты к дате "2008/10/05 00:00:00", создается впечатление, что добавлен дополнительный час.

т.е.: добавление 360 минут к 2008/10/05 00:00:00 в полночь должно прибыть к 2008/10/05 06: 00: 00

Но он прибывает в 2008/10/05 07: 00: 00

Абсолютно озадачивает то, что это ТОЛЬКО происходит, когда день 2008/10/05, во все остальные дни, когда я пытаюсь выполнить добавление минут правильно.

Я схожу с ума или это ошибка в Java?

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");

    try {
        String date = "2008/10/05 00:00:00";
        int minutesToAdd = 360;  // 6 hrs

        Calendar cal = Calendar.getInstance();
        cal.setTime(sdf.parse(date));
        cal.add(Calendar.MINUTE, minutesToAdd);
        System.out.println(cal.getTime());

    } catch (ParseException e) {}

Ответы [ 3 ]

18 голосов
/ 13 ноября 2008

В этот день есть переход на летнее время.

Вы в Новой Зеландии? Если это так, это означает, что ваши файлы часовых поясов устарели. Лучше зайдите на сайт загрузки Java и загрузите новые; ищите "Инструмент обновления часового пояса DST JDK".

3 голосов
/ 13 ноября 2008

Может ли это быть в летнее время?

1 голос
/ 13 ноября 2008

Взгляните на Joda-Time .

Из документации:

"Joda-Time был создан для радикального изменения даты и времени в Java. Классы JDK Date и Calendar очень плохо спроектированы, имеют множество ошибок и имеют странные эффекты производительности."

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...