it-swarm.com.ru

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

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

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

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

7
Peter Penzov

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

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.util.Date в Java.time.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
15
cole.markham

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

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

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

Преобразовать в Java.util.Date

Преобразование Java.sql.Date в Java.util.Date

6
Dmitry Nelepov

У меня нет 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();
3
LeonidasCZ

Ответ 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();
0
mirkorossi95