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 |