반응형
java.sql.timestamp를 LocalDate (java8) java.time로 변환하는 방법?
자바 8에서 어떻게 변환 할 수 있습니다 Timestamp
(에서 java.sql
A를) 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 와 같은 일부 하드 코딩 된 시간대입니다.
일반적인 접근 방식은
- java.time.Instant는 java.sql.Timestamp와 직접 관련이있는 클래스를 사용하여 새로운 java8 날짜 클래스를 자유롭게 사용하십시오 . 즉, 시간대 변환이 필요하지 않습니다.
- 이 java8 클래스에서 잘 설계된 메소드를 사용하여 올바른 작업을 수행하십시오. 우리의 경우 atZone (zoneId) 은 변환을 수행하고 특정 시간대를 사용하고 있음을 명시했습니다.
반응형
'developer tip' 카테고리의 다른 글
인덱스없이 팬더 DataFrame을 인쇄하는 방법 (0) | 2020.07.27 |
---|---|
프로그래밍 방식으로 환율에 액세스 (0) | 2020.07.27 |
Eclipse에서 콘솔이 자동으로 팝업되지 않게하는 방법 (0) | 2020.07.27 |
java.net.SocketException : 연결 재설정 (0) | 2020.07.27 |
ARC로 또는 ARC로? (0) | 2020.07.27 |