질문 : java.util.Date를 java.time.LocalDate로 변환
java.util.Date
객체를 새로운 JDK 8 / JSR-310 java.time.LocalDate
로 변환하는 가장 좋은 방법은 무엇입니까?
Date input = new Date();
LocalDate date = ???
답변
짧은 답변
Date input = new Date();
LocalDate date = input.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
설명
이름에도 불구하고 java.util.Date
는 "날짜"가 아니라 타임 라인의 순간을 나타냅니다. 객체 내에 저장된 실제 데이터는 1970-01-01T00 : 00Z (1970 년 GMT / UTC 시작 자정) 이후 long
JSR-310의 java.util.Date
에 해당하는 클래스 Instant
이므로 변환을 제공 toInstant()
메소드가 있습니다.
Date input = new Date();
Instant instant = input.toInstant();
java.util.Date
인스턴스에는 시간대 개념이 없습니다. toString
이 시간대에 상대적이기 때문에 java.util.Date
toString()
을 호출하면 이상하게 보일 수 있습니다. 그러나이 방법은 실제로 Java의 기본 시간대를 사용하여 문자열을 제공합니다. java.util.Date
의 실제 상태의 일부가 아닙니다.
Instant
에는 시간대에 대한 정보도 포함되어 있지 않습니다. Instant
에서 현지 날짜로 변환하려면 시간대를 지정해야합니다. 이는 기본 영역 ZoneId.systemDefault()
이거나 사용자 환경 설정의 시간대와 같이 애플리케이션이 제어하는 시간대 일 수 있습니다. atZone()
메서드를 사용하여 시간대를 적용합니다.
Date input = new Date();
Instant instant = input.toInstant();
ZonedDateTime zdt = instant.atZone(ZoneId.systemDefault());
ZonedDateTime
에는 현지 날짜 및 시간, 시간대 및 GMT / UTC로부터의 오프셋으로 구성된 상태가 포함됩니다. 따라서 날짜 ( LocalDate
toLocalDate()
사용하여 쉽게 추출 할 수 있습니다.
Date input = new Date();
Instant instant = input.toInstant();
ZonedDateTime zdt = instant.atZone(ZoneId.systemDefault());
LocalDate date = zdt.toLocalDate();
자바 9 답변
Java SE 9에는이 작업을 약간 단순화 하는 새로운 메소드가 추가되었습니다.
Date input = new Date();
LocalDate date = LocalDate.ofInstant(input.toInstant(), ZoneId.systemDefault());
이 새로운 대안은 더 직접적이고 쓰레기를 덜 생성하므로 더 나은 성능을 발휘해야합니다.
출처 : https://stackoverflow.com/questions/21242110/convert-java-util-date-to-java-time-localdate
'프로그래밍 언어 > JAVA' 카테고리의 다른 글
Java에서 클래스를 정적으로 선언 할 수 없는 이유 (0) | 2021.12.12 |
---|---|
Java에서 Base64 데이터 디코딩 하는 방법 (0) | 2021.12.12 |
JAVA 완벽한 JPA 엔티티 만들기 (0) | 2021.12.08 |
Java 중첩 for문 벗어나는 방법 (0) | 2021.12.08 |
자바 스크립트에서 난수 생성기 시드 (0) | 2021.12.07 |