Reputation: 401
I want to convert date in milliseconds to date but it doesn't convert correctly.
public static void main(String[] args) {
LocalDate today = LocalDateTime.now().toLocalDate();
System.out.println("Today: ----------" + today);
long todayLong = today.atStartOfDay(ZoneId.systemDefault()).toEpochSecond();
System.out.println("todayLong: ---------- " + todayLong);
LocalDate todayBack = Instant.ofEpochMilli(todayLong).atZone(ZoneId.systemDefault()).toLocalDate();
System.out.println("todayBack: ---------- "+todayBack);
}
Here is the output:
Today: ----------2017-06-27
todayLong: ---------- 1498507200
todayBack: ---------- 1970-01-18
Upvotes: 2
Views: 7942
Reputation: 21
You have a little mistake at the 6th line (Instant.ofEpochMilli
).
Use Instant.ofEpochSecond
instead:
LocalDate today = LocalDateTime.now().toLocalDate();
System.out.println("Today: ----------" + today);
long todayLong = today.atStartOfDay(ZoneId.systemDefault()).toEpochSecond();
System.out.println("todayLong: ---------- " + todayLong);
LocalDate todayBack = Instant.ofEpochSecond(todayLong).atZone(ZoneId.systemDefault()).toLocalDate();
System.out.println("todayBack: ---------- " + todayBack);
Upvotes: 2
Reputation: 3409
You need use ofEpochSecond
instead of ofEpochMilli
because your todayLong
is second
, not milisecond
LocalDate todayBack = Instant.ofEpochSecond(todayLong).atZone(ZoneId.systemDefault()).toLocalDate();
Upvotes: 11
Reputation: 48258
you have to do multiply the todayLong by 1000
LocalDate todayBack = Instant.ofEpochMilli(todayLong * 1000).atZone(ZoneId.systemDefault()).toLocalDate();
System.out.println("todayBack: ---------- " + todayBack);
to get the output:
Today: ----------2017-06-27
todayLong: ---------- 1498514400
todayBack: ---------- 2017-06-27
Upvotes: 1