web-dev-qa-db-fra.com

LocalDateTime to Java.sql.Date en Java 8?

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.

9
Ajeetkumar

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());
15
M. Prokhorov

@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);
16
user7605325

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());
0
Andy Thomas