Search code examples
javadatelocaldatezoneddatetime

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


Solution

  • You need use ofEpochSecond instead of ofEpochMilli because your todayLong is second, not milisecond

    LocalDate todayBack = Instant.ofEpochSecond(todayLong).atZone(ZoneId.systemDefault()).toLocalDate();