Comment convertir LocalDateTime
en Java.sql.Date
en Java-8 ?
Ma recherche sur Internet me donne principalement le code Timestamp
ou LocalDate
à Java.sql.Date
. Je cherche LocalDateTime
à Java.sql.Date
.
Il n'y a pas de corrélation directe entre LocalDateTime
et Java.sql.Date
, puisque ancien est un horodatage et le dernier est une date.
Il existe cependant une relation entre LocalDate
et Java.sql.Date
, et la conversion peut être effectuée comme suit:
LocalDate date = //your local date
Java.sql.Date sqlDate = Java.sql.Date.valueOf(date)
Ce qui pour toute LocalDateTime
vous donne le code suivant:
LocalDateTime dateTime = // your ldt
Java.sql.Date sqlDate = Java.sql.Date.valueOf(dateTime.toLocalDate());
@M. La réponse de Prokhorov est correcte , je veux juste ajouter quelques points.
Un Java.sql.Date
ne conserve que les valeurs de jour, mois et année. Les valeurs time (heure, minute, secondes et millisecondes) sont toutes définies à zéro . Ainsi, lors de la conversion d'une LocalDateTime
en Java.sql.Date
, ces champs sont perdus.
Si vous effectuez une conversion à sens unique et que cela ne vous dérange pas de perdre ces champs, vous pouvez le faire:
LocalDateTime dt = // LocalDateTime value
// convert to Date (time information is lost)
Java.sql.Date date = Java.sql.Date.valueOf(dt.toLocalDate());
Mais si vous souhaitez restaurer la LocalDateTime
d'origine plus tard, il est préférable de sauvegarder les champs de temps séparément, afin de pouvoir le récupérer:
LocalDateTime dt = // your LocalDateTime
// save time information (hour, minute, seconds, fraction of seconds)
LocalTime savedTime = dt.toLocalTime();
// convert to Date (time information is lost)
Java.sql.Date date = Java.sql.Date.valueOf(dt.toLocalDate());
// retrieve back the LocalDate (only day/month/year)
LocalDate localDate = date.toLocalDate();
// retrieve the LocalDateTime, with the original time values
LocalDateTime ldt = localDate.atTime(savedTime);
Il est possible de convertir LocalDateTime en Java.sql.date tout en conservant la partie heure sans avoir à formuler des hypothèses sur le fuseau horaire en utilisant Java.util.Date comme intermédiaire:
LocalDateTime dateValue = // your LocalDateTime
Java.util.Date utilDate;
String dateFormat = "yyyy-MM-dd'T'HH:mm:ss";
DateTimeFormatter dtf1 = DateTimeFormatter.ofPattern(dateFormat);
SimpleDateFormat sdf1 = new SimpleDateFormat(dateFormat);
try {
utilDate = sdf1.parse(dateValue.format(dtf1));
} catch (ParseException e) {
utilDate = null; // handle the exception
}
Java.sql.Date sqlDate = new Java.sql.Date(utilDate.getTime());