본문 바로가기
Back-End/Java

TIL 230609 : 날짜 시간 데이터와 인사하기. (1. Calendar, Date)

by 우인입니다 2023. 6. 9.

지난 시간에 git공부한 거 토대로 싹 브랜치 정리하고, 나아가 untracked되어야 할 파일이랑 폴더도 추가함.

이것때문에 IDE 모듈상의 오류 때문에 상당한 분노가 생김.


날짜 시간도 공부해야겠다

과제에 제시된 날짜시간의 형식

과제에서 처음 들어보는 개념으로 시간과 날짜에 대한 공부 필요성을 느꼈다.

오후시간에 여유가 있어 수정도 할 겸, 찬찬히 훑어보는 시간을 가졌다.

 

아래와 같이 나누어 알아보자.

1. Calendar, Date

2. SimpleDateFormat


1. CalendarDate

Calendar, Date 이 두 클래스는 자바의 초기 1.0 1.1버젼에서부터 시작된 클래스라고 한다.

자바의 정석 교재에서도 설명만하고 알아만 두면 좋다고 하고 넘어간다.

 

Calnedar

Calendar cal = new Calendar(); // 에러! Calendar는 추상클래스이고, 객체를 생성 못한다.
Calendar cal = Calendar.getInstance(); //Calendar를 구현한 클래스의 인스턴스를 반환.

calendar는 추상클래이다. 그래서 객체를 생성할 수 없다.

getInstance()을 통해 객체를 생성해야 하는데, 메소드를 보면 자동으로 지역을 기반으로 한 Calendar를 생성해주는 메소드를 통해 리턴을 해주고 있다.

Calendar의 getInstance메소드
createCalendar 메소드 내부. 지역정보를 받아 태국, 일본의 경우 그에 맞는 Calendar를 생성한다.

 

아래는 참고로, cal을 그냥 출력해봤다. 

 

각 상수로 숫자가 할당되어 있다. get(Calendar.YEAR); 형태로도 값을 얻을 수 있다.
MagicConstant라는 annotation이 있다. 처음 봄
get()에 입력한 숫자가 internalGet(int field) 들어가 결국 fields의 배열에서 가져오는 것 같다.

아까 cal을 그냥 출력했을 때 본 배열이 fields 배열같아서 toString을 검색했는데 맞는 것 같다.

Calendar를 상속받은 클래스 Gre~에서 fields를 찾아보자.

GregorianCalendar에 fields를 못 찾겠다. 공식문서 탐험은 이 쯤에서 유보해야 겠다.

cal.get() 이나 cal.set(), cal.add()정도로 활용하는 것이 기본적인 기능들이다.

 

 

 

Date

Date는 Calendar가 나오면서 사장되다시피 했다고 한다. deprecated.

하지만, 꼭 필요한 메소드가 있을 경우를 위해 변환하는 형태만 알아두자.

Calendar cal2 = Calendar.getInstance();
Date date2 = new Date(cal2.getTimeInMillis());   //Cal을 Date로 변환

Date date3 = new Date();
Calendar cal3 = Calendar.getInstance();
cal.setTime(date3);                              //Date를 Cal로 변환

 


2. SimpleDateFormat

: Calendar, Date클래스만으로 날짜 시간을 표현하기에 복잡하므로, SimpleDateFormat을 내일 이어서 배워보자.