본문 바로가기

프로그래밍언어/JAVA

[JAVA] Calendar & Date

반응형

1. Calendar & Date

 

Calendar Date java 초창기부터 제공되어진 클래스들이다. 초창기에 만들어진만큼 단점도 많지만 그만큼 많이 사용된다. 이러한 단점들을 보완하여 나온 것이 JDK1.8 java.time 패키지이다.

 

이번 장에서는 Calendar Date 클래스의 사용 예제에 대해서 알아본다.

 

- Calendar & GregorianCalendar

 

Calendar 는 추상 클래스이기 때문에 직접 객체를 생성하여 사용할 수 없다. Calendar 클래스를 상속받은 GregorianCalendar BuddhistCalendar 를 사용하여 객체를 생성하여 사용한다. 대부분의 국가에서는 그레고리력을 사용하기 때문에 GregorianCalendar 를 사용하면 되지만 태국의 경우 BuddhistCalendar 를 사용하여 구현해야 한다.

 

// cal1 의 경우 그레고리력을 사용하지 않는 지역에서는 소스를 수정해야한다.
Calendar cal1 = new GregorianCalendar();

// cal2 의 경우 날짜 역법에 상관없이 사용할 수 있다. 다만 getInstance()를 수정해야한다.
Calendar cal2 = Calendar.getInstance();

 

주로 로직의 소스를 수정하지 않기위해서 getInstance() 메서드를 사용하여 구현한다.

 

- Date Calendar 간의 변환

 

Calendar 는 Date 클래스 이후에 추가된 클래스로 Calendar 가 추가되면서 Date 의 대부분의 메서드가 deprecated 되었다. 그럼에도 Date 를 사용하는 경우가 있는데, 이러한 경우에 Date 와 Calendar 간의 변환이 필요한 경우가 발생한다.

 

// Calendar -> Date
Calendar cal = Calendar.getInstance();
Date date = new Date(cal.getTimeInMillis()); // Date(long date) 생성자 사용

// Date -> Calendar
Date date = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(date);

 

Calendar 의 getInstance() 를 통해 얻은 인스턴스는 기본적으로 현재 시스템의 날짜와 시간에 대한 정보를 가지고 있다. 이를 변경하기 위해서는 set 메서드를 사용하면 된다. 반대로 값을 가져오기 위해서는 get 메서드를 사용하면 된다.

 

Calendar cal = Calendar.getInstance();

System.out.println(cal.get(Calendar.YEAR)); // 2022
System.out.println(cal.get(Calendar.MONTH)); // 0

 

이때 주의할 점은 MONTH 의 경우 1~12 가 아니라 0~11 의 값을 반환한다는 것이다.

 

날짜간의 차이를 구할 때는 초단위로 변경한 후에 연산을 수행하면 된다. getTimeInMillis() 는 1/1000 초 단위로 값을 변환하여 준다.

 

Calendar t1 = Calendar.getInstance();
Calendar t2 = Calendar.getInstance();

t1.set(Calendar.MINUTE, 20);
t2.set(Calendar.MINUTE, 30);

// 1/1000 초 단위의 값을 분단위로 변경하여 출력한다.
System.out.println((t1.getTimeInMillis() - t2.getTimeInMillis()) / 1000 / 60); // 10
반응형

'프로그래밍언어 > JAVA' 카테고리의 다른 글

[JAVA] Collections Framework  (0) 2022.01.22
[JAVA] Format 클래스  (0) 2022.01.12
[JAVA] try-with-resources statement  (0) 2021.12.30
[JAVA] Serialization & Deserialization  (0) 2021.12.29
[JAVA] java.util 패키지  (0) 2021.12.19