Получить значение из выбора даты

Я хочу получить значение из JavaFX datepicker и сохранить значение как объект даты:

final DatePicker datePicker = new DatePicker(LocalDate.now());
Date date = datePicker.getValue();
grid.add(datePicker, 1, 9);

можете ли вы сказать мне, как я могу преобразовать LocalDate to Date?

4 ответов


как следует из названия, LocalDate не хранит часовой пояс или время суток. Поэтому для преобразования в абсолютное время необходимо указать часовой пояс и время суток. Существует простой способ сделать оба, atStartOfDay (ZoneId). Здесь я использую часовой пояс по умолчанию, который является локальным часовым поясом компьютера. Это дает вам мгновенный объект, который представляет и момент времени. Наконец, Java 8 добавил заводской метод на сегодняшний день, чтобы построить с момента.

LocalDate localDate = datePicker.getValue();
Instant instant = Instant.from(localDate.atStartOfDay(ZoneId.systemDefault()));
Date date = Date.from(instant);
System.out.println(localDate + "\n" + instant + "\n" + date);

это выдать результат ниже. Обратите внимание, что Instant по умолчанию печатается в формате UTC.

2014-02-25
2014-02-25T06:00:00Z
Tue Feb 25 00:00:00 CST 2014

конечно, вам нужно будет преобразовать java.утиль.Дата в java.время.LocalDate, чтобы установить значение на DatePicker. Для этого вам понадобится что-то вроде этого:

Date date = new Date();
Instant instant = date.toInstant();
LocalDate localDate = instant.atZone(ZoneId.systemDefault()).toLocalDate();
System.out.println(date + "\n" + instant + "\n" + localDate);

который даст вам выход, как:

Tue Feb 25 08:47:04 CST 2014
2014-02-25T14:47:04.395Z
2014-02-25

или вы можете использовать более простой способ

java.sql.Date gettedDatePickerDate = java.sql.Date.valueOf(myDatePicker.getValue());

и затем вы можете выполнить операцию в этом объекте date.

преобразовать в java.util.Date

преобразование java.язык SQL.Дата на java.утиль.Дата


у меня нет IDE под рукой, но это следует сделать трюк.

Date date = new Date(datePicker.getvalue().toEpochDay());

или наоборот.

LocalDate ld = datePicker.getValue();
Calendar c =  Calendar.getInstance();
c.set(ld.getYear(), ld.getMonthValue(), ld.getDayOfMonth());
Date date = c.getTime();

LeonidasCZ ответ не на 100% правильный:java.util.Date диапазон от 0 до 11 месяцев, но Calendar.getInstance() от 1 до 12, поэтому вы можете сделать это:

LocalDate ld = datePicker.getValue();
Calendar c =  Calendar.getInstance();
c.set(ld.getYear(), ld.getMonthValue() - 1, ld.getDayOfMonth());
Date date = c.getTime();

если вы хотите добавить часы, минуты, секунды тоже:

LocalDate ld = datePicker.getValue();
Calendar c =  Calendar.getInstance();
c.set(ld.getYear(), ld.getMonthValue() - 1, ld.getDayOfMonth(), hours, minutes, seconds);
Date date = c.getTime();