developer tip

java.sql.timestamp를 LocalDate (java8) java.time로 변환하는 방법?

optionbox 2020. 7. 27. 07:52
반응형

java.sql.timestamp를 LocalDate (java8) java.time로 변환하는 방법?


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


넌 할 수있어:

timeStamp.toLocalDateTime().toLocalDate();

시간대를 고려하여 @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();

받아 들인 대답은 이상적이지 않으므로 2 센트를 추가하기로 결정했습니다.

timeStamp.toLocalDateTime().toLocalDate();

일반적으로 나쁜 해결책입니다 . 시스템 시간대를 사용하여 암시 적 변환을 수행하여 실제로 혼란 스럽기 때문에 JDK 에이 방법을 추가 한 이유조차 확실하지 않습니다. 일반적으로 java8 날짜 클래스 만 사용하는 경우 프로그래머는 시간대를 지정해야합니다.

좋은 해결책은

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

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

일반적인 접근 방식은

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

참고 URL : https://stackoverflow.com/questions/23263490/how-to-convert-java-sql-timestamp-to-localdate-java8-java-time

반응형