Lusi
Lusi

Reputation: 401

Java 8 LocalDate from long to date not converted correct

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

Answers (3)

Markus W.
Markus W.

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

Viet
Viet

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

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

Related Questions