singleton
객체 형식으로 만들어져 있어 객체 생성 없이도 기능들을 사용할 수 있다. new
키워드를 사용한 객체 생성은 불가능하다.
- getInstance()를 사용해 Calendar 객체를 받아올 수 있다.
Calendar cal = Calendar.getInstance();
아래 모든 상수는 static
int
형 상수이다.
사용할 때는 Calendar.상수명
형태로 사용한다.
상수 의미 YEAR 현재 년도 MONTH 현재 월 (0부터 시작함에 주의 / +1해서 사용) DATE 현재 날짜 WEEK_OF_YEAR 현재 년도의 몇째 주 WEEK_OF_MONTH 현재 월의 몇째 주 DAY_OF_YEAR 현재 년도의 며칠째 DAY_OF_MONTH 현재 월의 며칠째 DAY_OF_WEEK 현재 요일(일요일[1]~토요일[7] HOUR 현재 시간(12시간제) HOUR_OF_DAY 현재 시간(24시간제) MINUTE 현재 분 SECOND 현재 초 AM_PM 현재 시간대(오전[0],오후[1])
.add(int field, int amount)
- 필드와 값을 설정하면 해당 필드에 입력한 값만큼을 더하는 메소드.
Calendar cal = Calendar.getInstance(); // 현재 설정된 날짜&시간을 출력하는 임의 메소드 DatePrinter.printDateTime(cal); ---------------------------------------------------------------- cal.add(Calendar.DAY_OF_MONTH,100); DatePrinter.printDateTime(cal); ---------------------------------------------------------------- // 출력결과 2023년 02월 03일 13시 48분 32초 2023년 05월 14일 13시 48분 32초 // 100일 후의 날짜값을 출력한다.
.set(int field, int value)
- 필드와 값을 설정하면 해당 필드 값을 입력한 값으로 설정하는 메소드.
Calendar cal = Calendar.getInstance(); // 현재 설정된 날짜&시간을 출력하는 임의 메소드 DatePrinter.printDateTime(cal); ---------------------------------------------------------------- cal.set(Calendar.YEAR, 2020); DatePrinter.printDateTime(cal); ---------------------------------------------------------------- // 출력결과 2023년 02월 03일 13시 48분 32초 2020년 02월 03일 13시 48분 32초 // 연도를 2020으로 set하여 출력한다.
- 이외에도
set
을 사용해 날짜를 세팅하는 몇 가지 방법이 있다.
set(int year, int month, int date)
- 필드값을 설정하지 않고 변수만 3개를 입력하면 차례로 연, 월, 일 값으로 설정된다.cal.set(1982, 5, 17); DatePrinter.printDateTime(cal); ---------------------------------------------------------------- // 출력결과 1982년 05월 17일 13시 48분 32초
set(int year, int month, int date, int hourOfDay, int minute)
- 필드값을 설정하지 않고 변수만 5개를 입력하면 차례로 연, 월, 일, 시간, 분 값으로 설정된다.
cal.set(1982, 5, 17, 1, 2); DatePrinter.printDateTime(cal); ---------------------------------------------------------------- // 출력결과 1982년 05월 17일 01시 02분 32초
set(int year, int month, int date, int hourOfDay, int minute, int second)
- 필드값을 설정하지 않고 변수만 6개를 입력하면 차례로 연, 월, 일, 시간, 분, 초 값으로 설정된다.
cal.set(1982, 5, 17, 1, 2, 3); DatePrinter.printDateTime(cal); ---------------------------------------------------------------- // 출력결과 1982년 05월 17일 01시 02분 03초
getActualMaximum(int field)
- 입력한 필드의 최대값을 반환한다.
int week_count = cal.getActualMaximum( Calendar.WEEK_OF_MONTH ); System.out.println(week_count); ---------------------------------------------------------------- // 출력결과 (4주까지 있는 달에는 4, 5주까지 있는 달에는 5가 출력된다.) 5
getActualMinimum(int field)
- 입력한 필드의 최대값을 반환한다.
int first_day = cal.getActualMinimum( Calendar.DAY_OF_MONTH ); System.out.println(first_day); ---------------------------------------------------------------- // 출력결과 1
//요일 인덱스 가져오기 int day = cal.get(Calendar.DAY_OF_WEEK); System.out.println("요일 인덱스 = " + day); // 요일을 출력하기 String[] day_name = {"일","월","화","수","목","금","토"}; System.out.println(day_name[day-1]); // 요일 인덱스는 1부터 시작하므로 1빼서 day_name 인덱스와 맞춰 준다. --------------------------------------------- // 출력결과 - 현재 요일에 맞는 인덱스와 요일 이름이 출력된다. 요일 인덱스 = 6 금
- 밀리세컨드를 얻을 때는 Calendar 클래스를 이용한
.getTimeInMillis()
외에도System.currentTimeMillis()
도 사용할 수 있다.// 현재 시각에 대한 TimeStamp단위를 밀리세컨즈 단위로 얻기 long ms1 = cal.getTimeInMillis(); System.out.println("파일 복사 시작 >> " + ms1); // 프로그램을 주어진 시간 동안 대기하도록 하는 처리 try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } // 처리 종료 시각 타임스탬프를 얻는다. long ms2 = System.currentTimeMillis(); System.out.println("파일 복사 끝 >> " + ms2); // 두 시간의 차이 얻기 long x = ms2 - ms1; System.out.println(x); // 1/1000초 이므로, 1000으로 나누면 소요 시간을 얻을 수 있다 long y = x / 1000; System.out.println(y + "초 지났음"); ----------------------------------------------------------- // 출력결과 파일 복사 시작 >> 1675407005295 파일 복사 끝 >> 1675407010317 5022 5초 지났음