从日期选择器中获取价值

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

【讨论】:

以上是关于从日期选择器中获取价值的主要内容,如果未能解决你的问题,请参考以下文章

如何使用asp C#从日期范围选择器中获取值

Android:如何从日期和时间选择器中获取值

从日期选择器中的特定日期计算每月的第一周?

在 Iphone 的日期选择器中插入空白值

如何限制用户从日期选择器中选择过去的日期?

如何在 jQuery UI 日期选择器中获取日期、月份、年份?