I have an external API that returns me dates as long
s, 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.
The given epoch days, epoch seconds or epoch milliseconds are converted into LocalDate by adding the given time to 1970-01-01T00:00:00Z.
LocalDate is an immutable class that represents Date with default format of yyyy-MM-dd. We can use now() method to get the current date.
The number of milliseconds since the "Unix epoch" 1970-01-01T00:00:00Z (UTC). This value is independent of the time zone. This value is at most 8,640,000,000,000,000ms (100,000,000 days) from the Unix epoch. In other words: millisecondsSinceEpoch.
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
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());
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With