IT 개발/Java

[Java] 자바 - Calendar클래스로 날짜와 시간 다루기

KADOSHOLY 2022. 7. 22. 08:00
반응형

 

자바 - Calendar클래스로 날짜와 시간 다루기

 

 

Calendar클래스는 년, 월, 일, 요일의 날짜와 시, 분, 초, 밀리초단위의 시간을 다룰 수 있는 클래스로, get() 메소드와 set() 메소드를 통해 날짜와 시간을 가져오거나 설정할 수 있습니다. 예제를 통해 Calendar 클래스의 사용법에 대해서 알아보도록 하겠습니다. 

 

 

   목차

  1. Calendar 객체 생성하기
  2. get() 메소드로 날짜 정보 가져오기
  3. get() 메소드로 시간 정보 가져오기
  4. set() 메소드로 날짜와 시간 설정하기
  5. 사용예제 - 두 날짜 차이 구하기

 

 

1. Calendar 객체 생성하기

 

Calendar객체는 추상클래스로 new 연산자를 통해 객체를 생성할 수 없습니다. 대신에 아래와 같이 getInstance() 메소드를 통해 Calendar객체를 얻을 수가 있습니다. 이때 getInstance()가 반환해준 객체를 통해 사용자는 현재의 날짜와 시간 정보를 알 수 있습니다. 

 

Calendar c1 = Calendar.getInstance();

 

 

2. get() 메서드로 날짜 정보 가져오기

 

앞서 getInstance()를 통해 얻은 Calendar객체의 get() 메소드를 이용하여 날짜 정보를 얻을 수 있습니다. 

 

  1. get(Calendar.YEAR) : 연도
  2. get(Calendar.MONTH) : 월 (0부터 시작함, 0~11)
  3. get(Calendar.DATE) :
  4. get(Calendar.DAY_OF_YEAR) : 해당 연도의 첫날(1월 1일) ~ 현재일까지의 일수
  5. get(Calendar.DAY_OF_MONTH) : 해당월의 첫날(1일) ~ 현재일까지의 일수
  6. get(Calendar.DAY_OF_WEEK) : 해당주의 첫날 ~ 현재일까지의 일수 (일,월,화,수,목,금,토 순)
  7. get(Calendar.DAY_OF_WEEK_IN_MONTH) : 현재요일에 대해 해당 월의 첫 번째 요일 ~ 현재 요일의 수
  8. get(Calendar.WEEK_OF_YEAR) : 올해의 현재주차
  9. get(Calendar.WEEK_OF_MONTH) : 이번달의 현재주차

 

(1) 날짜 정보 가져오기 사용예제 (오늘 날짜 :  2022년 7월 21일)

Calendar c1 = Calendar.getInstance();
		
System.out.println("1: " + c1.get(Calendar.YEAR));
System.out.println("2: " + c1.get(Calendar.MONTH));
System.out.println("3: " + c1.get(Calendar.DATE));
System.out.println("4: " + c1.get(Calendar.DAY_OF_YEAR));
System.out.println("5: " + c1.get(Calendar.DAY_OF_MONTH));
System.out.println("6: " + c1.get(Calendar.DAY_OF_WEEK));
System.out.println("7: " + c1.get(Calendar.DAY_OF_WEEK_IN_MONTH));
System.out.println("8: " + c1.get(Calendar.WEEK_OF_YEAR));
System.out.println("9: " + c1.get(Calendar.WEEK_OF_MONTH));

[실행결과]
1: 2022
2: 6
3: 21
4: 202
5: 21
6: 5
7: 3
8: 30
9: 4

 

 

3. get() 메서드로 시간 정보 가져오기

 

날짜 정보와 마찬가지로 Calendar객체의 get() 메소드를 이용하여 시간 정보 또한 얻을 수 있습니다. 

 

  1. get(Calendar.HOUR) : 시간 (12시간제, 0 ~ 11로 표시됨)
  2. get(Calendar.HOUR_OF_DAY) : 시간 (24시간제, 0 ~ 23으로 표시됨)
  3. get(Calendar.MINUTE) :
  4. get(Calendar.SECOND) :
  5. get(Calendar.MILLISECOND) : 1/1000초 
  6. get(Calendar.AM_PM) : 오전/오후 (오전:0, 오후:1)

 

(1) 시간 정보 가져오기 사용예제 (현재 시간 : 오후 10시 37분)

Calendar c1 = Calendar.getInstance();
	
System.out.println("1: " + c1.get(Calendar.HOUR));
System.out.println("2: " + c1.get(Calendar.HOUR_OF_DAY));
System.out.println("3: " + c1.get(Calendar.MINUTE));
System.out.println("4: " + c1.get(Calendar.SECOND));
System.out.println("5: " + c1.get(Calendar.MILLISECOND));
System.out.println("6: " + c1.get(Calendar.AM_PM));

[실행결과]
1: 10
2: 22
3: 37
4: 54
5: 736
6: 1

 

 

 

4. set() 메서드로 날짜와 시간 설정하기

 

내가 원하는 날짜와 시간 정보를 설정하는 방법은 Calendar객체의 set() 메소드를 이용하여 설정하실 수 있습니다. 

 

  1. set(2022, 2, 1) : 2022년 3월 1일 설정
  2. set(Calendar.YEAR, 2022) : 2022년 설정
  3. set(Calendar.MONTH, 2) : 3월 설정
  4. set(Calendar.DATE, 1) : 1일 설정
  5. set(Calendar.HOUR_OF_DAY, 14) : 오후 2시로 설정
  6. set(Calendar.MINUTE, 45) : 45분으로 설정
  7. set(Calendar.SECOND, 15) : 15초로 설정
  8. clear() : 날짜와 시간을 초기화합니다. (1970년 1월 1일 0시 0분 0초)

 

(1) 날짜와 시간 설정하기 사용예제 

 

cf) SimpleDateFormat은 날짜와 시간을 보기 좋게 나타내기 위해 사용된 클래스입니다. 

Calendar c1 = Calendar.getInstance();
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy년 MM월 dd일 E요일 aa HH시 mm분 ss초");
				
c1.clear();
System.out.println("1: " + sdf1.format(c1.getTime()));
		
c1.set(2000, 11, 31);
System.out.println("2: " + sdf1.format(c1.getTime()));
		
c1.set(Calendar.YEAR, 2022);
c1.set(Calendar.MONTH, 2);
c1.set(Calendar.DATE, 1);
c1.set(Calendar.HOUR_OF_DAY, 14);
c1.set(Calendar.MINUTE, 45);
c1.set(Calendar.SECOND, 15);
System.out.println("3: " + sdf1.format(c1.getTime()));

[실행결과]
1: 1970년 01월 01일 목요일 오전 00시 00분 00초
2: 2000년 12월 31일 일요일 오전 00시 00분 00초
3: 2022년 03월 01일 화요일 오후 14시 45분 15초

 

 

5. 사용예제 - 두 날짜 차이 구하기

 

아래 예제는 두 개의 날짜가 주어졌을 때, 두 날짜의 일수 차이와 시간 차이를 구하는 예제입니다. 

 

  1. long getTimeInMillis() : 기준시간으로부터 현재시간을 1/1000초 단위로 반환합니다. 
long a = 0;
long b = 0;
		
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy년 MM월 dd일 E요일 aa HH시 mm분 ss초");
				
c1.clear();
c2.clear();
c1.set(2000, 1, 1);
c2.set(2000, 1, 3);

a = c1.getTimeInMillis();
b = c2.getTimeInMillis();
		
System.out.println("1: " + sdf1.format(c1.getTime()));
System.out.println("2: " + sdf1.format(c2.getTime()));
System.out.println("시간차이: " + (b-a)/(60*60*1000) + "시간");
System.out.println("일수차이: " + (b-a)/(60*60*1000*24) + "일");

[실행결과]
1: 2000년 02월 01일 화요일 오전 00시 00분 00초
2: 2000년 02월 03일 목요일 오전 00시 00분 00초
시간차이: 48시간
일수차이: 2일

 

반응형