날짜와 시간
- java.util.Date
- 날짜와 시간을 다룰 목적으로 만들어진 클래스
- Date의 메서드는 거의 deprecated되었지만 여전히 쓰이고 있다.
- java.util.Calendar
- Date클래스를 개선한 새로운 클래스(JDK1.1), 여전히 단점 존재
- java.time 패키지
- Date, Calendar의 단점을 개선한 새로운 클래스들을 제공
Calendar클래스
- 추상 클래스이므로 getInstance()를 통해 구현된 객체를 얻어야한다.
Calendar cal = new Calendar();
Calendar cal = Calendar.getInstance();
Calendar클래스 예제1
- get()으로 날짜와 시간 필드 가져오기 - int get(int field)
public class Ex1 {
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
int thisYear = cal.get(Calendar.YEAR);
int lastDayOfMonth = cal.getActualMaximum(Calendar.DATE);
}
}
- Calendar에 정의된 필드
- YEAR, 년
- MONTH, 월 (0부터 시작)
- WEEK_OF_YEAR, 그 해의 몇 번째 주
- WEEK_OF_MONTH, 그 달의 몇 번째 주
- DATE, 일
- DAY_OF_MONTH, 그 달의 몇 번째 일
- DAY_OF_YEAR, 그 해의 몇 번째 일
- DAY_OF_WEEK, 요일
- DAY_OF_WEEK_IN_MONTH, 그 달의 몇 번째 요일
- HOUR, 시간 (0~11)
- HOUR_OF_DAY, 시간 (0~23)
- MINUTE, 분
- SECOND, 초
- MILLISECOND, 천분의 일초
- ZONE_OFFSET, GMT기준 시차
- AM_PM, 오전/오후
Calendar클래스 예제2
void set(int year, int month, int date, int hourOfDay, int minute, int second)
- 날짜 지정하는 방법, 월(MONTH)이 0부터 시작한다는 점에 주의
Calendar date1 = Calendar.getInstance();
date1.set(2017, 7, 15);
Calendar time1 = Calendar.getInstance();
time1.set(Calendar.HOUR_OF_DAY, 10);
time1.set(Calendar.MINUTE, 20);
time1.set(Calendar.SECOND, 30);
public class Ex1 {
public static void main(String[] args) {
final int[] TIME_UNIT = {3600, 60, 1};
final String[] TIME_UNIT_NAME = {"시간", "분", "초"};
Calendar time1 = Calendar.getInstance();
Calendar time2 = Calendar.getInstance();
long difference =
Math.abs(time2.getTimeInMillis() - time1.getTimeInMillis())/1000;
System.out.println("tim1과 time2의 차이는 "+ difference +"초 입니다.");
String tmp = "";
for(int i=0; i < TIME_UNIT.length; i++ ) {
tmp += difference / TIME_UNIT[i] + TIME_UNIT_NAME[i];
difference %= TIME_UNIT[i];
}
System.out.println("시분초로 변환하면 " + tmp + "입니다.");
}
}
Calendar클래스 예제3
- clear()는 Calendar객체의 모든 필드를 초기화
- 1970년 1월 1일 00:00:00으로 설정됨 (컴퓨터가 시작된 이후)
- claer(int field)는 Calendar객체의 특정 필드를 초기화
dt.clear(Calendar.SECOND);
dt.clear(Calendar.MINUTE);
Calendar클래스 예제4
- get() : 필드 읽기, set() : 필드 변경, clear() : 필드 초기화
- add()는 특정 필드의 값을 증가 또는 감소 (다른 필드에 영향 O)
Calendar date = Calendar.getInstance();
date.clear();
date.set(2020, 7, 31);
date.add(Calendar.DATE, 1);
date.add(Calendar.MONTH, -8);
- roll()은 특정 필드의 값을 증가 또는 감소 (다른 필드에 영향 X)
date.set(2020, 7, 31);
date.roll(Calendar.DATE, 1);
date.roll(Calendar.MONTH, -8);