2013-12-07 5 views
3

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

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

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

+0

Взгляните на [этот пример] (http://stackoverflow.com/questions/5597671/how-to-convert-joda-localdate-to-java-util-date) – MadProgrammer

ответ

13

Как следует из названия, 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 
3

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

Для справки, toEpochDay() кажется чтобы дата была установлена ​​на 01/01/1970, независимо от значения, установленного в datepicker –

5

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

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

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

Измени java.util.Date

Converting java.sql.Date to java.util.Date

0

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();