从日期选择器中获取价值
Posted
技术标签:
【中文标题】从日期选择器中获取价值【英文标题】:Get value from Date picker 【发布时间】:2013-12-07 20:08:22 【问题描述】:我想从 JavaFX datepicker 中获取值并将值存储为日期对象:
final DatePicker datePicker = new DatePicker(LocalDate.now());
Date date = datePicker.getValue();
grid.add(datePicker, 1, 9);
你能告诉我如何将LocalDate
转换为Date
吗?
【问题讨论】:
看看this example 【参考方案1】:顾名思义,LocalDate 不存储时区或一天中的时间。因此,要转换为绝对时间,您必须指定时区和一天中的时间。有一个简单的方法可以做到这两个,atStartOfDay(ZoneId)。这里我使用默认时区,即计算机的本地时区。这为您提供了一个 Instant 对象,它代表即时的时间。最后,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
【讨论】:
【参考方案2】:或者你可以使用更简单的方法
java.sql.Date gettedDatePickerDate = java.sql.Date.valueOf(myDatePicker.getValue());
然后你就可以在这个日期对象内进行操作了。
转换为java.util.Date
Converting java.sql.Date to java.util.Date
【讨论】:
这不是一个完美的答案,因为如果值为null
,它会调用NullPointerException
。【参考方案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();
【讨论】:
作为参考,toEpochDay() 似乎会导致日期设置为 01/01/1970,无论日期选择器中设置的值如何 谢谢。效果很好,正是我所需要的。【参考方案4】: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();
【讨论】:
以上是关于从日期选择器中获取价值的主要内容,如果未能解决你的问题,请参考以下文章