web-dev-qa-db-fra.com

Obtenez de la valeur avec le sélecteur de date

Je souhaite obtenir la valeur de JavaFX datepicker et la stocker en tant qu'objet Date:

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

Pouvez-vous me dire comment je peux convertir LocalDate en Date?

7
Peter Penzov

Comme son nom l'indique, LocalDate ne stocke ni fuseau horaire ni heure du jour. Par conséquent, pour convertir en heure absolue, vous devez spécifier le fuseau horaire et l'heure. Il existe une méthode simple pour faire les deux, atStartOfDay (ZoneId). Ici, j'utilise le fuseau horaire par défaut, qui est le fuseau horaire local de l'ordinateur. Cela vous donne un objet Instant qui représente et instant dans le temps. Enfin, Java 8 a ajouté une méthode de fabrique à Date pour construire à partir d’un 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);

Cela vous donnera une sortie comme ci-dessous. Notez que l’Instant par défaut s’imprime au format UTC.

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

Bien sûr, vous devrez convertir votre Java.util.Date en un Java.time.LocalDate pour définir la valeur sur le DatePicker. Pour cela, vous aurez besoin de quelque chose comme ça:

Date date = new Date();
Instant instant = date.toInstant();
LocalDate localDate = instant.atZone(ZoneId.systemDefault()).toLocalDate();
System.out.println(date + "\n" + instant + "\n" + localDate);

Ce qui vous donnera une sortie comme:

Tue Feb 25 08:47:04 CST 2014
2014-02-25T14:47:04.395Z
2014-02-25
15
cole.markham

Ou vous pouvez utiliser le moyen le plus simple

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

Et ensuite, vous pouvez effectuer une opération dans cet objet de date.

Convertir en Java.util.Date

Conversion de Java.sql.Date en Java.util.Date

6
Dmitry Nelepov

Je n'ai pas IDE sous la main, mais cela devrait faire l'affaire.

Date date = new Date(datePicker.getvalue().toEpochDay());

Ou bien.

LocalDate ld = datePicker.getValue();
Calendar c =  Calendar.getInstance();
c.set(ld.getYear(), ld.getMonthValue(), ld.getDayOfMonth());
Date date = c.getTime();
3
LeonidasCZ

La réponse LeonidasCZ n’est pas correcte à 100%: Java.util.Date mois est compris entre 0 et 11, mais Calendar.getInstance() est compris entre 1 et 12, vous pouvez donc:

LocalDate ld = datePicker.getValue();
Calendar c =  Calendar.getInstance();
c.set(ld.getYear(), ld.getMonthValue() - 1, ld.getDayOfMonth());
Date date = c.getTime();

Si vous voulez ajouter des heures, des minutes, des secondes aussi:

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