[java] java8 이상에서의 날짜 처리 By starseat 2021-11-18 14:20:27 java/spring Post Tags # java.time.Instant 날짜 시간 관련되서 새로운사실을 알게 되었다. `java.util.Date`/`.Calendar` 및 '`java.text.SimpleDateFormat` 은 `java8` 이상에 내장된 `java.time` 프레임워크로 대체 되었다고 한다. 또한 Legacy Class 는 잘못 설계되고 혼란스럽고 번거로운 것이라고 한다. `java8` 이상 버전으로 작업 시 `java.util.Date` 대신 `java.time.Instant`로 사용해야겠다. ![Table of date-time types in Java, both modern and legacy](https://i.stack.imgur.com/WOJAF.png) # LocalDate 또한 (java8 이상에서) `LocalDate`, `LocalTime`, `LocalDateTime` 을 사용한다. 데이터베이스에 제대로 매핑 되지 않는 이슈는 Hibernate v5.2.10 에서 해결 되었다고 한다. (Spring Boot 2.x 를 사용하면 기본적으로 해당 버전 이상 버전을 사용하니 별다른 설정 없이 바로 사용 가능) - 참고: [Java의 날짜와 시간 API](https://d2.naver.com/helloworld/645609) ## 간단 사용 예 ```java Post post = Post.builder() .title("title") .content("content") .createAt(new LocalDate()) .build(); ``` ```java import java.time.LocalDate; import java.time.LocalDateTime; import java.time.ZoneId; import java.time.format.DateTimeFormatter; public class DateUtil { public static final String DEFAULT_TIME_ZONE = "Asia/Seoul"; public static final String DEFAULT_DATE_PATTERN = "yyyyMMdd"; public static final String DEFAULT_TIME_PATTERN = "HHmmss"; public static String getToday() { DateTimeFormatter formatter = DateTimeFormatter.ofPattern(DEFAULT_DATE_PATTERN); return LocalDate.now(ZoneId.of(DEFAULT_TIME_ZONE)).format(formatter); } public static String getToday(String pattern) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern); return LocalDate.now(ZoneId.of(DEFAULT_TIME_ZONE)).format(formatter); } public static String getYesterday() { LocalDate today = LocalDate.now(); DateTimeFormatter formatter = DateTimeFormatter.ofPattern(DEFAULT_DATE_PATTERN); return today.minusDays(1).format(formatter); } public static String getCurrentTime() { DateTimeFormatter formatter = DateTimeFormatter.ofPattern(DEFAULT_TIME_PATTERN); return LocalDateTime.now(ZoneId.of(DEFAULT_TIME_ZONE)).format(formatter); } } ``` # 출처 * [https://stackoverflow.com/questions/19112357/java-simpledateformatyyyy-mm-ddthhmmssz-gives-timezone-as-ist](https://stackoverflow.com/questions/19112357/java-simpledateformatyyyy-mm-ddthhmmssz-gives-timezone-as-ist) * [http://daplus.net/java-java-simpledateformat-yyyy-mm-ddthh-mm-ssz-%EC%9D%80-%ED%91%9C%EC%A4%80-%EC%8B%9C%EA%B0%84%EB%8C%80%EB%A5%BC-ist%EB%A1%9C-%EC%A0%9C%EA%B3%B5%ED%95%A9%EB%8B%88/](http://daplus.net/java-java-simpledateformat-yyyy-mm-ddthh-mm-ssz-%EC%9D%80-%ED%91%9C%EC%A4%80-%EC%8B%9C%EA%B0%84%EB%8C%80%EB%A5%BC-ist%EB%A1%9C-%EC%A0%9C%EA%B3%B5%ED%95%A9%EB%8B%88/) * [https://brunch.co.kr/@kd4/11](https://brunch.co.kr/@kd4/11) Previous Post [boot] 콘솔 로그 변경 Next Post [java] MongoTemplate 을 이용한 Mongodb join 예