본문 바로가기

Tip

[JAVA] 날짜, 시간 제대로 사용하기

Calendar, Date 클래스의 문제점

 

1. 불변 객체가 아니다.

-> 즉 set으로 변경이 가능하다는 점은 누군가 악의적으로 변경할 수 있기 때문에 get/set 메서드에서 직접 Date클래스를 사용하는 것이 위험하다.

2. 상수 필드 남용

-> calendar.add(Calendar.SECOND, 2);

3. 헷갈리는 월 지정

-> 1월을 0으로 표현하는 문제 + Calendar.OCTOBER로 월을 지정하지만 실질적인 값은 9(!=10)인 문제

4. 일관성 없는 요일 상수

-> 어디서는 일요일이 0, 어디서는 일요일이 1

5. Date와 Calendar 객체의 역할 분담

-> 다소 치명적인데 년/월/일 계산은 Date 클래스만으로는 부족해서 왔다갔다 하는 문제가 있다. 또한 Calendar객체를 생성하고 Date 객체를 생성하는 프로세스를 거치기 때문에 번거롭고 생성비용이 비싸다.

6. 기타 java.util.Date 하위 클래스의 문제

 

 

이 문제 해결을 위해 java 8부터는 LocalDate, LocalTime, LocalDateTime 클래스가 생성

 

-----------------사용법-----------------

LocalDate currentDate = LocalDate.now(); // 컴퓨터의 현재 날짜 정보 2018-07-26

LocalDate myDate = LocalDate.of(int year, int month, int datOfMonth); //년,월,일

 

getYear();

getMonth(); (Month 열거값나옴 JANUARY, FEBRUARY)

getMonthValue(); 월(1,2,3,...)

getDayOfYear(); 년의 몇 번째 일

getDayOfMonth(); 월의 몇번째 일

getDateOfWeek();요일(MONDAY, TUESDAY,...)

isLeapYear(); 윤년여부

 

LocalTime currentTime = LocalTime.now();    // 컴퓨터의 현재 시간 정보. 결과 : 16:24:02.408

LocalTime targetTime = LocalTime.of(int hour, int minute, int second, int nanoOfSecond);

 

int    getHour()    시간

int    getMinute()    분

int    getSecond()    초

int    getNano()    나노초

 

LocalDateTime 시간,날짜 동시에 필요할 때 사용.

LocalDateTime currentDateTime = LocalDateTime.now();    // 컴퓨터의 현재 날짜와 시간 정보. 결과 : 2018-07-26T16:34:24.757

LocalDateTime targetDateTime = LocalDateTime.of(int year, int month, int dayOfMonth, int hour, int minute, int second, int nanoOfSecond);

ZonedDateTime utcDateTime = ZonedDateTime.now(ZoneId.of("UTC"));

ZonedDateTime seoulDateTime = ZonedDateTime.now(ZoneId.of("Asia/Seoul"));


감사합니다.
출처: https://jeong-pro.tistory.com/163

'Tip' 카테고리의 다른 글

[spring] file upload size 설정  (0) 2020.04.02
[mybatis] if 비교  (0) 2020.04.02
[mybatis] select 결과를 hashMap 에 저장  (0) 2020.04.02
[javascript] decodeURI  (0) 2020.04.02
[JSTL] c:out 쓰는 이유  (0) 2020.04.02