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