Установка минимально выбираемой даты как 15 лет после дня рождения (из mySQL) и макс как текущей даты

У меня есть таблица пользователей MySQL, содержащая дни рождения пользователей. я сохранил дату из sql в качестве переменной DateOfBirth, Теперь я хочу установить минимальную выбираемую дату jDateChooser названный GameDateChooser как 15 лет после дня рождения и максимально выбираемой даты до текущей даты. я пытался найти другие статьи, но они не ответили на мой вопрос

2 ответа

Даже когда setSelectableDateRange() требует двух старомодных Date объекты, я бы все равно предпочел использовать современные классы для расчета возраста, а не устаревшие Calendar:

    LocalDate dateOfBirth = LocalDate.of(1959, Month.FEBRUARY, 15);
    Instant min = dateOfBirth.plusYears(15)
            .atStartOfDay(ZoneId.systemDefault())
            .toInstant();
    jDateChooser.setSelectableDateRange(Date.from(min), new Date());

LocalDate а также Instant поставляются встроенными в Java 8 и более поздние версии, а также доступны для Java 6 и 7. Date.from(Instant) только Java 8 и более поздние версии, для Java 6 и 7 есть другие варианты преобразования. Достаточно новый драйвер MySQL JDBC должен быть в состоянии получить LocalDate из базы данных.

Из документа Java есть setSelectableDateRange, который может принимать две даты, минимальную и максимальную:

public void setSelectableDateRange(java.util.Date min, java.util.Date max)

В вашем случае вам нужно что-то вроде этого:

Calendar cal = Calendar.getInstance();
cal.add(Calendar.YEAR, -15);//15 year before
Date min = cal.getTime();

Date max = new Date();//actual date

JDateChooser jDateChooser = new JDateChooser();
//set your dates in your JDateChooser
jDateChooser.setSelectableDateRange(min, max);
Другие вопросы по тегам