[java] 밀리 초 단위로 긴 Epoch 시간에서 Java 8 LocalDate를 작성하려면 어떻게해야합니까?

longEpoch가 시작된 이후 밀리 초로 표시되는 날짜를 s 로 반환하는 외부 API가 있습니다.

이전 스타일의 자바 API로, 나는 간단하게 만들 것 Date와의를

Date myDate = new Date(startDateLong)

Java 8 LocalDateLocalDateTime클래스 의 해당 내용은 무엇입니까 ?

나는에 의해 표현 시점 변환에 관심이 longA를 LocalDate내 현재 로컬 시간대에.



답변

Epoch 이후 밀리 초가 있고 현재 현지 시간대를 사용하여 현지 날짜로 변환하려면 다음을 사용할 수 있습니다.

LocalDate date =
    Instant.ofEpochMilli(longValue).atZone(ZoneId.systemDefault()).toLocalDate();

그러나 시스템의 기본 시간대조차도 변경 될 수 있으므로 동일한 시스템에서도 동일한 long값이 후속 실행에서 다른 결과를 생성 할 수 있습니다.

또한와 LocalDate달리 java.util.Date실제로 날짜와 시간이 아니라 날짜를 나타냅니다.

그렇지 않으면, 당신은 사용할 수 있습니다 LocalDateTime:

LocalDateTime date =
    LocalDateTime.ofInstant(Instant.ofEpochMilli(longValue), ZoneId.systemDefault());


답변

Instant.ofEpochMilli (long)로 시작할 수 있습니다 :

LocalDate date =
  Instant.ofEpochMilli(startDateLong)
  .atZone(ZoneId.systemDefault())
  .toLocalDate();


답변

더 나은 대답이 있다고 생각합니다.

new Timestamp(longEpochTime).toLocalDateTime();


답변

시간대와 물건을 제쳐두고 아주 간단한 대안이 new Date(startDateLong)될 수 있습니다.LocalDate.ofEpochDay(startDateLong / 86400000L)


답변

now.getTime ()을 긴 값으로 바꾸십시오.

//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));


답변

에포크 초 타임 스탬프가 SQL에서 유래되었거나 SQL과 관련이있는 특정 경우 다음과 같이 얻을 수 있습니다.

long startDateLong = <...>

LocalDate theDate = new java.sql.Date(startDateLong).toLocalDate();


답변