web-dev-qa-db-ja.com

LocalDateTimeからJava.sql.DateへJava 8?

Java-8LocalDateTimeJava.sql.Dateに変換する方法

インターネットでの私の検索では、ほとんどの場合、Timestamp関連コードまたはLocalDateからJava.sql.Dateが提供されます。 LocalDateTimeからJava.sql.Dateを探しています。

13
Ajeetkumar

前者はタイムスタンプであり、後者は日付であるため、LocalDateTimeJava.sql.Dateの間に直接の相関関係はありません。

ただし、LocalDateJava.sql.Dateの間には関係があり、変換は次のように実行できます。

LocalDate date = //your local date
Java.sql.Date sqlDate = Java.sql.Date.valueOf(date)

どのLocalDateTimeに対しても、次のコードが得られます。

LocalDateTime dateTime = // your ldt
Java.sql.Date sqlDate = Java.sql.Date.valueOf(dateTime.toLocalDate());
16
M. Prokhorov

@ M。Prokhorovの答えは正しい 、ポイントをいくつか追加したいだけです。

Java.sql.Dateは、日、月、年の値のみを保持します。 time値(時間、分、秒、ミリ秒) はすべてゼロに設定されます 。したがって、LocalDateTimeJava.sql.Dateに変換すると、これらのフィールドは失われます。

一方向の変換を行っていて、それらのフィールドを失うことを気にしないのであれば、それは大丈夫です:

LocalDateTime dt = // LocalDateTime value
// convert to Date (time information is lost)
Java.sql.Date date = Java.sql.Date.valueOf(dt.toLocalDate());

ただし、後で元のLocalDateTimeを復元する場合は、時間フィールドを個別に保存して、回復できるようにすることをお勧めします。

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

Java.util.Dateを仲介として使用することにより、タイムゾーンについての仮定をすることなく、時刻部分を保持しながらLocalDateTimeからJava.sql.dateに変換することができます。

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