Search code examples
javadatetimejava-8java-time

How can I create a Java 8 LocalDate from a long Epoch time in Milliseconds?


I have an external API that returns me dates as longs, represented as milliseconds since the beginning of the Epoch.

With the old style Java API, I would simply construct a Date from it with

Date myDate = new Date(startDateLong)

What is the equivalent in Java 8's LocalDate/LocalDateTime classes?

I am interested in converting the point in time represented by the long to a LocalDate in my current local timezone.


Solution

  • If you have the milliseconds since the Epoch and want to convert them to a local date using the current local timezone, you can use Instant.ofEpochMilli(long epochMilli)

    LocalDate date =
        Instant.ofEpochMilli(longValue).atZone(ZoneId.systemDefault()).toLocalDate();
    

    but keep in mind that even the system’s default time zone may change, thus the same long value may produce different result in subsequent runs, even on the same machine.

    Further, keep in mind that LocalDate, unlike java.util.Date, really represents a date, not a date and time.

    Otherwise, you may use a LocalDateTime:

    LocalDateTime date =
        LocalDateTime.ofInstant(Instant.ofEpochMilli(longValue), ZoneId.systemDefault());