[JAVA] Calendar 클래스 (달력 출력)
Calendar 클래스 (달력 출력)
Calendar 클래스도 Date 클래스처럼 날짜와 시간에 관한 정보를 표현할 때 사용한다. Date 클래스에서 deprecate된 메소드나 생성자들 중 같은 기능의 메소드가 Calendar 클래스에서 제공된다.
Calendar 클래스는 추상 클래스이므로 객체를 직접 생성할 수는 없지만, getInstance() 메소드를 이용하여 시스템의 날짜와 시간 정보를 표현할 수 있다.
* Calendar 클래스의 주요 상수
상수 | 사용방법 | 설명 |
static int YEAR | Calendar.YEAR | 현재 년도를 가져온다. |
static int MONTH | Calendar.MONTH | 현재 월을 가져온다. (1월은 0) |
static int DATE | Calendar.DATE | 현재 월의 날짜를 가져온다. |
static int WEEK_OF_YEAR | Calendar.WEEK_OF_YEAR | 현재 년도의 몇째 주 |
static int WEEK_OF_MONTH | Calendar.WEEK_OF_MONTH | 현재 월의 몇째 주 |
static int DAY_OF_YEAR | Calendar.DAY_OF_YEAR | 현재 년도의 날짜 |
static int DAY_OF_MONTH | Calendar.DAY_OF_MONTH | 현재 월의 날짜 (DATE와 동일) |
static int DAY_OF_WEEK | Calendar.DAY_OF_WEEK | 현재 요일 (일요일은 1, 토요일은 7) |
static int HOUR | Calendar.HOUR | 현재 시간 (12시간제) |
static int HOUR_OF_DAY | Calendar.HOUR_OF_DAY | 현재 시간 (24시간제) |
static int MINUTE | Calendar.MINUTE | 현재 분 |
static int SECOND | Calendar.SECOND | 현재 초 |
- Calendar 클래스의 상수는 이 외에도 많이 있다.
* Calendar 클래스 메소드
Calendar 클래스의 메소드 | 설명 |
boolean after(Object when) | when과 비교하여 현재 날짜 이후이면 true, 아니면 false를 반환한다. |
boolean before(Object when) | when과 비교하여 현재 날짜 이전이면 true, 아니면 false를 반환한다. |
boolean equals(Object obj) | 같은 날짜값인지 비교하여 true, false를 반환한다. |
int get(int field) | 현재 객체의 주어진 값의 필드에 해당하는 상수 값을 반환한다. 이 상수값은 Calendar 클래스의 상수중에 가진다. |
static Calendar getInstance() | 현재 날짜와 시간 정보를 가진 Calendar 객체를 생성한다. |
Date getTime() | 현재의 객체를 Date 객체로 변환한다. |
long getTimeInMills() | 객체의 시간을 1/1000초 단위로 변경하여 반환한다. |
void set(int field, int value) | 현재 객체의 특정 필드를 다른 값으로 설정한다. |
void set(int year, int month, int date) | 현재 객체의 년, 월, 일 값을 다른 값으로 설정한다. |
void set(int year, int month, int date, int hour, int minute, int second) | 현재 객체의 년, 월, 일, 시, 분, 초 값을 다른 값으로 설정한다. |
void setTime(Date date) | date 객체의 날짜와 시간 정보를 현재 객체로 생성한다. |
void setTimeInMills(long mills) | 현재 객체를 1/1000초 단위의 주어진 매개변수 시간으로 설정한다. |
int getActualMinimum(int field) | 현재 객체의 특정 필드의 최소 값을 반환한다. |
int getActualMaximum(int field) | 현재 객체의 특정 필드의 최대 값을 반환한다. |
Calendar 클래스는 추상 클래스로 생성자를 제공하지 않는다. 따라서, Calendar 클래스의 객체를 생성하기 위해 new 연산자를 사용할 수 없다. 그 대신 getInstance() 메소드를 사용하여 현재 날짜와 시간의 객체를 얻어올 수 있다.
* Calendar 예제
import java.util.Calendar; public class CalendarTest { public static void main(String[] args) { Calendar cal = Calendar.getInstance(); int year = cal.get(Calendar.YEAR); int mon = cal.get(Calendar.MONTH); int day = cal.get(Calendar.DAY_OF_MONTH); int hour = cal.get(Calendar.HOUR_OF_DAY); int min = cal.get(Calendar.MINUTE); int sec = cal.get(Calendar.SECOND); System.out.println("현재시간"); System.out.println(year + "년 "+ mon+"월 "+day+"일"); System.out.println(hour + "시 "+ min+"분 "+sec+"초"); } } |
* Calendar 를 이용한 달력 출력 소스
import java.util.Calendar; public class CalendarPrint { // Calendar 인스턴스 생성 Calendar cal = Calendar.getInstance(); // 요일 표시 헤더 private String[] calHeader = {"일","월","화","수","목","금","토"}; // 날짜 데이터 배열 private String[][] calDate = new String[6][7]; private int width=calHeader.length; // 배열 가로 넓이 private int startDay; // 월 시작 요일 private int lastDay; // 월 마지막 날짜 private int inputDate=1; // 입력 날짜 // 생성자 : 데이터 생성 public CalendarPrint(int year, int month) throws Exception{ // 입력 month(월) 은 1~12 사이의 값이다. if(month<1 || month>12){ System.out.println("월은 1~12 사이의 숫자입니다."); throw new Exception(); }else{ // Calendar에 년,월,일 셋팅 cal.set(Calendar.YEAR, year); cal.set(Calendar.MONTH, month-1); cal.set(Calendar.DATE, 1); startDay = cal.get(Calendar.DAY_OF_WEEK); // 월 시작 요일 lastDay = cal.getActualMaximum(Calendar.DATE); // 월 마지막 날짜 // 2차 배열에 날짜 입력 int row = 0; for(int i=1; inputDate<=lastDay; i++){ // 시작 요일이 오기전에는 공백 대입 if(i<startDay) calDate[row][i-1]=""; else{ // 날짜 배열에 입력 calDate[row][(i-1)%width]=Integer.toString(inputDate); inputDate++; // 가로 마지막 열에 오면 행 바꿈 if(i%width==0) row++; } } } } // 달력 출력 public void printCal(){ // 달력 헤더 출력 "일월화수목금토" for(int i=0; i<width; i++){ System.out.print(calHeader[i]+" "); } System.out.println(); // 날짜 배열 출력 int row=0; for(int j=1 ; j<lastDay+startDay; j++){ System.out.print(calDate[row][(j-1)%width]+" "); if((j-1)%width==width-1){ System.out.println(); row++; } } } ...... getter(), setter() ...... } |
import java.util.Scanner; |
- 위 달력 출력 프로그램은 CalendarPrint 객체를 생성하면서, year와 month 를 입력받는다.
- 입력받은 year와 month로 이차 배열에 해당 년/월 의 날짜를 입력한다.
- printCal() 메소드를 호출하면 System.out 콘솔에 달력을 출력할 수 있다.
- 해당 데이터를 별도로 사용하려면, getCalHeader()와 getCalDate()로 배열 형태로 데이터를 가져올 수 있다.
JAVA API DOC : java.util.Calendar
출처: https://hyeonstorage.tistory.com/205?category=557602 [개발이 하고 싶어요]
'JAVA > Java' 카테고리의 다른 글
[JAVA] Formatter 클래스 format(), 날짜 format() (0) | 2019.10.07 |
---|---|
[JAVA] HashMap 클래스 (0) | 2019.10.07 |
[JAVA] Enumeration 인터페이스 정리 (0) | 2019.10.07 |
[JAVA] Vector 클래스 정리 (0) | 2019.10.01 |
[JAVA] Date 클래스 (0) | 2019.10.01 |
[JAVA] 예외 처리 Exception try-catch-finally, throws, 사용자 정의 예외 (0) | 2019.10.01 |
[JAVA] 예외(Exception) 란? 체크예외와 RuntimeException (0) | 2019.09.30 |
[JAVA] 객체의 형 변환 (0) | 2019.09.30 |