Convert between Java LocalDateTime and Date
August 28, 2019
This page will provide examples to convert from Java java.time.LocalDateTime
to java.util.Date
and from java.util.Date
to java.time.LocalDateTime
. The LocalDateTime
, introduced in Java 8, is date-time without time-zone. The Date
represents a specific instant in time, with millisecond precision.
1. LocalDateTime to Date
LocalDateTime
does not consist a time-zone and Date
represents a specific instant in time, with millisecond precision. To convert from LocalDateTime
to Date
, we need to provide time-zone. LocalDateTime + Time-Zone = Date
We can convert
LocalDateTime
to Date
with following methods.
1. Using
LocalDateTime.atZone()
: It combines this date-time with a given time-zone to create a ZonedDateTime
. Then this ZonedDateTime
can be converted into Instant
. The method Date.from()
accepts Instant
and returns equivalent Date
instance.
LocalDateTime localDateTime = LocalDateTime.parse("2019-11-15T13:15:30"); Instant instant = localDateTime.atZone(ZoneId.systemDefault()).toInstant(); Date date = Date.from(instant); System.out.println(date);
LocalDateTime.toInstant()
: It combines this local date-time and the specified offset to form an Instant
.
instant = localDateTime.toInstant(ZoneOffset.UTC); date = Date.from(instant); System.out.println(date);
Timestamp.valueOf()
: It converts a string object in JDBC timestamp escape format to a Timestamp
value. The given string date should be in yyyy-MM-dd HH:mm:ss format.
instant = Timestamp.valueOf(localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))).toInstant(); date = Date.from(instant); System.out.println(date);
Date
instance, we also use Date
constructor by passing time in milliseconds.
Timestamp timestamp = Timestamp.valueOf(localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); date = new Date(timestamp.getTime()); System.out.println(date);
Find the example.
LocalDateTimeToDate.java
package com.concretepage; import java.sql.Timestamp; import java.time.Instant; import java.time.LocalDateTime; import java.time.ZoneId; import java.time.ZoneOffset; import java.time.format.DateTimeFormatter; import java.util.Date; public class LocalDateTimeToDate { public static void main(String[] args) { LocalDateTime localDateTime = LocalDateTime.parse("2019-11-15T13:15:30"); Instant instant = localDateTime.atZone(ZoneId.systemDefault()).toInstant(); Date date = Date.from(instant); System.out.println(date); instant = localDateTime.toInstant(ZoneOffset.UTC); date = Date.from(instant); System.out.println(date); instant = Timestamp.valueOf(localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))).toInstant(); date = Date.from(instant); System.out.println(date); Timestamp timestamp = Timestamp.valueOf(localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); date = new Date(timestamp.getTime()); System.out.println(date); } }
Fri Nov 15 13:15:30 IST 2019 Fri Nov 15 18:45:30 IST 2019 Fri Nov 15 13:15:30 IST 2019 Fri Nov 15 13:15:30 IST 2019
2. Date to LocalDateTime
We can convert fromDate
to LocalDateTime
in following ways.
1. First convert
Date
into Instant
using Instant.ofEpochMilli()
method. Then use LocalDateTime.ofInstant()
method to convert Instant
into LocalDateTime
with given zone id.
Date date = new Date(); LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(date.getTime()), ZoneId.systemDefault()); System.out.println(localDateTime);
Date
into Instant
then attach zone id using Instant.atZone()
that will return ZonedDateTime
. Then use ZonedDateTime.toLocalDateTime()
to get LocalDateTime
instance.
localDateTime = Instant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDateTime(); System.out.println(localDateTime);
DateToLocalDateTime.java
package com.concretepage; import java.time.Instant; import java.time.LocalDateTime; import java.time.ZoneId; import java.util.Date; public class DateToLocalDateTime { public static void main(String[] args) { Date date = new Date(); LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(date.getTime()), ZoneId.systemDefault()); System.out.println(localDateTime); localDateTime = Instant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDateTime(); System.out.println(localDateTime); } }
2019-08-28T20:31:13.473 2019-08-28T20:31:13.473
References
Class LocalDateTimeClass Date