从日期选择器中获取价值

我想从JavaFX datepicker获取值并将值存储为Date Object:

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

你能告诉我如何将LocalDate转换为Date吗?

顾名思义,LocalDate不存储时区,也不存储时间。 因此,要转换为绝对时间,您必须指定时区和时间。 有两种方法可以做到这一点,atStartOfDay(ZoneId)。 这里我使用默认时区,它是计算机的本地时区。 这为您提供了一个即时对象,它代表并及时。 最后,Java 8在Date中添加了一个工厂方法来构建。

 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 

或者你可以使用更简单的方法

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

然后您可以在此日期对象中执行操作。

转换为java.util.Date

将java.sql.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();