날짜와 시간
- java.util.Date
- 날짜와 시간을 다룰 목적으로 만들어진 클래스(JDK 1.0, 1995년 말~)
- Date의 메소드는 거의 deprecated(앞으로 사용X)되었지만, 여전히 쓰고 있다.(예전부터 사용해서 뿌리가 깊기 때문에 아직 사용)
- java.util.Calendar → 실무에서 여전히 많이 쓰임
- Date클래스를 개선한 새로운 클래스(JDK1.1, 1997년). 여전히 단점이 존재
- java.time 패키지
- Date와 Calendar의 단점을 개선한 새로운 클래들을 제공(JDK1.8(Java8), 2014~)
→ Date와 Calendar 단점: 날짜와 시간을 같이 다룸
↳ time : 날짜(LacalDate) 시간(LocalTime), 날짜+시간(LocalDateTime) 따로 가능
Calendar 클래스
: 추상클래스이므로 getInstance()를 통해 구현된 객체를 얻어야 한다.
Calendar cal = new Calendar(); // 에러! 추상클래스는 인스턴스를 생성할 수 없다. Calendar cal = Calendar.getInstance(); // 가능, getInstance()메소드는 Calendar클래스를 구현한 클래스의 인스턴스를 반환한다.
↳ getInstance()를 호출하면, 메소드가 사용자시스템에 있는 정보를 읽어와서 어떤 캘린더를 쓰는지 확인해서 3가지 중에서 1개를 반환해줌(우리나라는 서양력)
new GregorianCalendar()
객체를 만들어서 반환해줌
- Calendar
1) 서양력 - gregorian : 우리나라가 씀
2) 불교력
3) 일본력→ 그럼 왜
new GregorianCalendar()
를 안쓰고Calendar.getInstance()
를 쓰는가?
: 특정 캘린더 코드를 넣어놓으면 다른 캘린더를 사용해야할 때 원하는 캘린더로 또 코드를 수정해줘야하기때문에, 직접 지정하는것보다 메소드를 넣어서 상황에 맞게 반환하는게 더 좋음 (추상화)
get()으로 날짜와 시간 필드 가져오기 : int get(int field)
Calendar cal = Calendar.getInstance(); // 현재 날짜와 시간으로 셋팅됨 int thisYear = cal.get(Calendar.YEAR); // 올해가 몇년인지 알아낸다. int lastDayOfMonth = cal.getActualMaximum(Calendar.DATE); // 이 달의 마지막 날
Calendar에 정의된 필드
1) 날짜
2) 시간
⇒ 다 외우지 않아도 됨. 필요할 때 보고 쓰면 돼!
출처
- 자바의 정석 기초편 : ch 10- 1~3