How to convert Date to LocalDate in Java 8
Despite its name the java.util.Date represents an instant on the time-line, not a "date". The actual data stored within the object is a long count of milliseconds since 1970-01-01T00:00Z (midnight at the start of 1970 GMT/UTC).
The equivalent class to java.util.Date in JSR-310 is Instant, thus there is a convenient method like the toInstant() to provide the conversion:
Date input = new Date();
Instant instant = input.toInstant();
A java.util.Date instance has no concept of time-zone. This might seem strange if you call the toString() on a java.util.Date, because the toString is relative to a time-zone. However, that method actually uses Java's default time-zone on the fly to provide the string. The time-zone is not part of the actual state of java.util.Date.
An Instant also does not contain any information about the time-zone. Thus, to convert from an Instant to a local date it is necessary to specify a time-zone. This might be the default zone - ZoneId.systemDefault() or it might be a time-zone that your application controls, such as a time-zone from user preferences. Use the atZone() method to apply the time-zone:
Date input = new Date();
Instant instant = input.toInstant();
ZonedDateTime zdt = instant.atZone(ZoneId.systemDefault());
A ZonedDateTime contains a state consisting of the local date and time, time-zone and the offset from GMT/UTC. As such the date - LocalDate - can be easily extracted using the toLocalDate().
Java Program to Convert Date to LocalDate in Java 8
Without wasting any more of your time, here is the complete program to convert a Date object to LocalDate instance in Java 8.
package test;
import java.time.Instant;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Date;
/**
* Java Program to show how to convert java.util.Date and LocalDate in Java 8.
* There are multiple ways to convert Date to LocateDate, as we see in this
* article.
*
* @author Javin
*/
public class Test {
public static void main(String args[]) {
// Easiest way is by using java.sql.Date which is modified in Java 8
// and contains direct conversion method with new Date and Time
// classes e.g. toLocalDate() and toLocalTime()
Date date = new java.util.Date();
LocalDate localDate = new java.sql.Date(date.getTime()).toLocalDate();
System.out.println("1st way to convert Date to LocalDate in Java 8 : "
+ localDate);
// By using Instant class op Java 8
Date currentDate = new Date();
Instant currentInstant = currentDate.toInstant();
ZonedDateTime zdt = currentInstant.atZone(ZoneId.systemDefault());
LocalDate lDate = zdt.toLocalDate();
System.out.println("2nd way to convert Date to LocalDate in Java 8 : "
+ lDate);
}
}
Output
1st way to convert Date to LocalDate in Java 8 : 2015-01-27
2nd way to convert Date to LocalDate in Java 8 : 2015-01-27
That's all about how to convert Date to LocalDate in Java 8. In this example, I have shown you two ways to covert a given Date to LocalDate in Java, by using java.sql.Date and then by using the Instant class from Java time API.
0 comments:
Post a Comment