[java] java.sql.timestamp를 LocalDate (java8) java.time으로 변환하는 방법은 무엇입니까?

자바 8에서 어떻게 변환 할 수 있습니다 Timestamp(에서 java.sqlA를) LocalDate(에서 java.time)?



답변

넌 할 수있어:

timeStamp.toLocalDateTime().toLocalDate();

참고 timestamp.toLocalDateTime() 사용합니다 Clock.systemDefaultZone()변환을 할 시간대를. 이것은 당신이 원하는 것일 수도 있고 아닐 수도 있습니다.


답변

받아 들여진 대답이 이상적이지 않아서 2 센트를 더하기로 결정했습니다

timeStamp.toLocalDateTime().toLocalDate();

일반적으로 나쁜 솔루션입니다 . 시스템 시간대를 사용하여 암시 적 변환을 수행하여 작업을 실제로 혼란스럽게 만들기 때문에 JDK에이 메서드를 추가 한 이유를 잘 모르겠습니다. 일반적으로 java8 날짜 클래스 만 사용할 때 프로그래머는 좋은 시간대를 지정해야합니다.

좋은 해결책은

timestamp.toInstant().atZone(zoneId).toLocalDate()

여기서 zoneId 는 사용하려는 시간대이며 시스템 시간대를 사용하려는 경우 일반적으로 ZoneId.systemDefault () 또는 ZoneOffset.UTC 와 같은 하드 코딩 된 시간대입니다.

일반적인 접근 방식은

  1. 직접 관련된 클래스를 사용하여 새로운 java8 날짜 클래스를 벗어나십시오. 예를 들어 우리의 경우 java.time.Instant는 java.sql.Timestamp와 직접 관련되어 있습니다. 즉, 그들 사이에 시간대 변환이 필요하지 않습니다.
  2. 이 java8 클래스에서 잘 설계된 메소드를 사용하여 올바른 작업을 수행하십시오. 우리의 경우 atZone (zoneId) 는 변환을 수행하고 특정 시간대를 사용하고 있음을 명시했습니다.

답변

시간대를 고려하여 @assylias 답변을 약간 확장하겠습니다. 특정 시간대에 대해 LocalDateTime을 가져 오는 방법에는 두 가지 이상이 있습니다.

전체 애플리케이션에 대해 setDefault 시간대를 사용할 수 있습니다. 타임 스탬프-> java.time 변환 전에 호출해야합니다.

public static void main(String... args) {
    TimeZone utcTimeZone = TimeZone.getTimeZone("UTC");
    TimeZone.setDefault(utcTimeZone);
    ...
    timestamp.toLocalDateTime().toLocalDate();
}

또는 toInstant.atZone 체인을 사용할 수 있습니다.

timestamp.toInstant()
        .atZone(ZoneId.of("UTC"))
        .toLocalDate();


답변