'Date와 LocalDate차이점, 날짜 및 시간 처리하는 클래스의 변천사'에서 다루는 각 기술의 핵심 개념과 동작 방식의 차이점을 분석한 내용이다.
* Period.between() : 년/월/일 차이 계산(각 단위별로 연산)의 차이를 고려하여 상황에 맞게 적용해야 한다.
시간순으로 클래스변천사를 나열해보았다. 바쁘니까 결론부터 보자
☝️결론
LocalDate와 LocalDateTime을 쓰자!
Java8부터는 LocalDate와 LocalDateTime이 등장했다. 그전에는 자바 기본 날짜타입인 Date클래스, Calenar클래스를 사용했는데 문제점이 꽤나 많아서 오픈소스인 JodaTime을 통해 문제점들을 피하곤했다. 하지만 Java8에서부터는 더이상 피할 필요가 없도록 LocalDate와 LocalDateTime이 추가되었다.
Date클래스, Calenar클래스 문제점
변하지 않는 객체가 아님
Calenar.OCTOBER 숫자값이 9로 헷갈리게 설정되어있어 문제를 야기함
java.util.Date 클래스
deprecated처리되었지만 이미 작성된 많은 API가 파라미터나 리턴타입으로 Date를 여전히 사용.
Stringday=null; switch(dayOfWeek){ case Calendar.SUNDAY : day = "일"; break; case Calendar.MONDAY : day = "월"; break; case Calendar.TUESDAY : day = "화"; break; case Calendar.WEDNESDAY : day = "수"; break; case Calendar.THURSDAY : day = "목"; break; case Calendar.FRIDAY : day = "금"; break; case Calendar.SATURDAY: day = "토"; break; default : System.out.println("다시입력해주세요"); } return String.format("%d년 %d월 %d일(%s)", year, month, date, day); }
longmonDiff= ChronoUnit.MONTHS.between(date1, date2); System.out.println("총 몇 개월 차이 ? "+monDiff);
LocalDateTimedt1= LocalDateTime.of(2011, 3, 01, 1,1,1); LocalDateTimedt2= LocalDateTime.of(2020, 3, 01, 1,1,1); Durationd= Duration.between(dt1, dt2); System.out.println(d); System.out.println("getSeconds사용한 몇 초 차이? "+d.getSeconds()); longsecDiff= ChronoUnit.SECONDS.between(dt1, dt2); System.out.println("chronounit사용한 몇 초 차이? "+ secDiff); } //출력값 P66Y11M22D 몇 년 차이 ? 66 몇 월 차이 ? 11 몇 일 차이 ? 22 총 몇 개월 차이 ? 803 PT78912H getSeconds사용한 몇 초 차이? 284083200 chronounit사용한 몇 초 차이? 284083200