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

后端 未结 6 1312
一整个雨季
一整个雨季 2020-11-28 02:15

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 woul

相关标签:
6条回答
  • 2020-11-28 02:45

    In a specific case where your epoch seconds timestamp comes from SQL or is related to SQL somehow, you can obtain it like this:

    long startDateLong = <...>
    
    LocalDate theDate = new java.sql.Date(startDateLong).toLocalDate();
    
    0 讨论(0)
  • 2020-11-28 02:51

    I think I have a better answer.

    new Timestamp(longEpochTime).toLocalDateTime();
    
    0 讨论(0)
  • 2020-11-28 02:53

    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());
    
    0 讨论(0)
  • 2020-11-28 02:54

    Timezones and stuff aside, a very simple alternative to new Date(startDateLong) could be LocalDate.ofEpochDay(startDateLong / 86400000L)

    0 讨论(0)
  • 2020-11-28 02:58

    You can start with Instant.ofEpochMilli(long):

    LocalDate date =
      Instant.ofEpochMilli(startDateLong)
      .atZone(ZoneId.systemDefault())
      .toLocalDate();
    
    0 讨论(0)
  • 2020-11-28 02:59

    replace now.getTime() with your long value.

    //GET UTC time for current date
            Date now= new Date();
            //LocalDateTime utcDateTimeForCurrentDateTime = Instant.ofEpochMilli(now.getTime()).atZone(ZoneId.of("UTC")).toLocalDateTime();
            LocalDate localDate = Instant.ofEpochMilli(now.getTime()).atZone(ZoneId.of("UTC")).toLocalDate();
            DateTimeFormatter dTF2 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
            System.out.println(" formats as " + dTF2.format(utcDateTimeForCurrentDateTime));
    
    0 讨论(0)
提交回复
热议问题