jMonthChooser показывает, что возвращает целочисленное значение месяца, но всегда возвращает 01 в качестве значения при выборе любого месяца - PullRequest
0 голосов
/ 11 января 2019
{
    SimpleDateFormat myformat = new SimpleDateFormat("MM");             
    String abc = myformat.format(jMonthChooser2.getMonth());
}

Это jMonthChooser всегда возвращает 01.

Ответы [ 2 ]

0 голосов
/ 12 января 2019

java.time

    DateTimeFormatter monthFormatter = DateTimeFormatter.ofPattern("MM");
    String monthString = monthFormatter.format(Month.of(jMonthChooser2.getMonth() + 1));

Я добавляю 1 к номеру месяца, который я получаю от JMonthChooser для компенсации, так как подозреваю, что он дает нам номер месяца на основе 0 (от 0 до 11), тогда как я знаю, что перечисление Month насчитывает месяцы так же, как люди, с 1 по 12. Если вы находите + 1 некрасивым (что это такое), альтернатива:

    String monthString = monthFormatter.format(Month.values()[jMonthChooser2.getMonth()]);

Выбирай, что найдешь менее загадочным.

Поскольку SimpleDateFormat общеизвестно хлопотно и давно устарел, я использую java.time, современный Java-интерфейс даты и времени. С ним гораздо приятнее работать, чем со старыми классами даты и времени.

Отказ от ответственности: я не знаю JMonthChooser и не проверял свой код в этом классе.

Что пошло не так в вашем коде?

Когда вы вводите число в диапазоне от 0 до 11 в SimpleDateFormat.format, средство форматирования понимает его как число миллисекунд с эпохи 1 января 1970 года в 00:00 UTC. Поэтому независимо от того, какой месяц вы выбираете, дата и время, которое вы пытаетесь отформатировать, находятся в пределах нескольких миллисекунд от этой даты, поэтому месяц всегда является январским (только в некоторых часовых поясах это все равно было бы в декабре 1969 года).

Ссылки

0 голосов
/ 12 января 2019

Первое, что нужно отметить, - у нас недостаточно кода, чтобы точно ответить на ваш вопрос.

Во-вторых, я предлагаю вам добавить прослушиватель изменения свойства, чтобы увидеть, делаете ли вы что-то еще, что может вызвать это.

Используйте приведенный ниже код для получения распечатки месяца, который вы выбрали сразу после его выбора.

JMonthChooser jmc = new JMonthChooser();
jmc.addPropertyChangeListener("month", new PropertyChangeListener() {
    @Override
    public void propertyChange(PropertyChangeEvent e) {
       System.out.println(e.getNewValue()));
    }
});

Лучше всего предположить, что вы запускаете эту программу непосредственно в соответствии с вашим JMonthChooser и что вы всегда читаете месяц по умолчанию

...