我想从JavaFX datepicker获取值并将值存储为Date Object:
final DatePicker datePicker = new DatePicker(LocalDate.now());
Date date = datePicker.getValue();
grid.add(datePicker, 1, 9);
您能告诉我如何将LocalDate
转换为Date
吗?
答案 0 :(得分:18)
顾名思义,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
答案 1 :(得分:6)
或者您可以使用更简单的方式
java.sql.Date gettedDatePickerDate = java.sql.Date.valueOf(myDatePicker.getValue());
然后您可以在此日期对象中执行操作。
转换为java.util.Date
答案 2 :(得分:4)
我手边还没有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 :(得分: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();