sourcecode

긴 Epoch 시간(밀리초)에서 Java 8 LocalDate를 작성하려면 어떻게 해야 합니까?

copyscript 2022. 8. 9. 22:55
반응형

긴 Epoch 시간(밀리초)에서 Java 8 LocalDate를 작성하려면 어떻게 해야 합니까?

날짜를 반환하는 외부 API를 가지고 있습니다.longs, Epoch 시작 후 밀리초로 표시됩니다.

오래된 스타일의 Java API로, 나는 단순히 구성했을 것이다.Date으로 처음부터

Date myDate = new Date(startDateLong)

Java 8에서는 무엇이 동등합니까?LocalDate/LocalDateTime수업?

다음 중 하나로 대표되는 시점을 변환하는 데 관심이 있습니다.long에 대해서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(긴 길이)시작할 수 있습니다.

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

프로젝트에 인스턴트 날짜와 로컬 날짜를 모두 사용하는 것은 그다지 좋아하지 않습니다.

내가 할 일:

 val calendar = Calendar.getInstance().apply {
    //set timeZone because calendar.timeInMillis = UTC milliseconds
    //and calender uses the default timezone
    timeZone = TimeZone.getTimeZone("UTC")
 }
 calendar.clear()
 calendar.set(localDate.year, localDate.monthValue - 1, localDate.dayOfMonth)
 val millis = calendar.timeInMillis

@Michael Piefel 답변에 기초한 간단한 버전:

LocalDate myDate = LocalDate.ofEpochDay(Duration.ofMillis(epochMillis).toDays());

에폭초 타임스탬프가 SQL에서 생성되거나 SQL과 관련된 경우 다음과 같이 얻을 수 있습니다.

long startDateLong = <...>

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

언급URL : https://stackoverflow.com/questions/35183146/how-can-i-create-a-java-8-localdate-from-a-long-epoch-time-in-milliseconds

반응형