Java Calendar.set не дает правильный результат - PullRequest
2 голосов
/ 20 июля 2009

Я не могу понять, в чем проблема с приведенным ниже кодом, возможно, это что-то очевидное, но я слишком слеп, чтобы увидеть это на данном этапе. Я передаю дату «01.01.2009» экземпляру календаря. Затем я пытаюсь установить месяц на 2 для марта, и вывод, который я вижу,

в формате: 01.01.2009

кал месяц: 2

cal.set( Calendar.MONTH, mth ); //mth = int 2

log.debug("formatted: " + formatter.format(cal.getTime()));
log.debug("cal month: "+Integer.valueOf(cal.get(Calendar.MONTH)).toString());

Когда я устанавливаю Calendar.DAY на максимальное значение, дата получается как 31/01/2009

Почему мои настройки месяца не занимают?

Ответы [ 3 ]

7 голосов
/ 30 июня 2011

Мы столкнулись с этим, и в результате было установлено, что значение, которое вы устанавливаете, не используется, пока вы на самом деле не попытаетесь «получить» значение из Календаря. Мы были озадачены, потому что при использовании отладчика значение никогда не устанавливалось, но когда вы его действительно «получаете», оно работает.

http://download.oracle.com/javase/1.5.0/docs/api/java/util/Calendar.html

Получение и установка значений полей календаря

Значения полей календаря можно установить, вызвав методы set. Любые значения полей, установленные в Календаре, не будут интерпретироваться до тех пор, пока ему не понадобится рассчитать значение времени (в миллисекундах от эпохи) или значения полей календаря. Вызов get, getTimeInMillis, getTime, add and roll включает такие вычисления.

2 голосов
/ 20 июля 2009

Я посмотрю точно, что происходит, но общее правило: не используйте java.util. {Дата, Календарь} . Используйте Joda Time вместо этого ... это так что намного чище ...

РЕДАКТИРОВАТЬ: Я не могу воспроизвести вашу проблему в настоящее время. Я бы по-прежнему рекомендовал использовать Joda, но если бы вы могли опубликовать короткую, но завершенную программу, чтобы продемонстрировать проблему, мы могли бы решить, что происходит не так.

РЕДАКТИРОВАТЬ: Основываясь на другом комментарии, мне интересно, если ваш форматтер не так ... вы действительно используете "дд / мм / гггг", а не "дд / мм / гггг"? «мм» означает минуты, а не месяцы.

0 голосов
/ 28 июля 2010

Возможно, вы хотели использовать Calendar.DAY_OF_MONTH

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