web-dev-qa-db-ja.com

日付ピッカーから値を取得する

JavaFX datepickerから値を取得し、その値をDateオブジェクトとして保存したい:

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

LocalDateDateに変換する方法を教えてください。

8
Peter Penzov

名前が示すように、LocalDateはタイムゾーンも時刻も格納しません。したがって、絶対時間に変換するには、タイムゾーンと時刻を指定する必要があります。両方を実行する簡単なメソッド、atStartOfDay(ZoneId)があります。ここでは、コンピュータのローカルタイムゾーンであるデフォルトのタイムゾーンを使用します。これにより、時間を表すインスタントオブジェクトが得られます。最後に、Java 8は、インスタントから構築するために日付にファクトリメソッドを追加しました。

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

これにより、以下のような出力が得られます。インスタントはデフォルトでUTCで印刷されることに注意してください。

2014-02-25
2014-02-25T06:00:00Z
Tue Feb 25 00:00:00 CST 2014

もちろん、DatePickerに値を設定するには、Java.util.DateをJava.time.LocalDateに変換する必要があります。そのためには、次のようなものが必要になります。

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
19
cole.markham

または、最も簡単な方法を使用できます

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

そして、この日付オブジェクト内で操作を実行できます。

に変換 Java.util.Date

Java.sql.DateからJava.util.Dateへの変換

6
Dmitry Nelepov

私は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();
4
LeonidasCZ

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();
_
0
mirkorossi95