Получить значение из выбора даты
Я хочу получить значение из 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
у меня нет 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();