Calendar Class 를 사용하여 달력을 만드는데 알아둘 사항을 정리했다.
Date는 JDK1.0, Calendar는 JDK1.1 부터 제공되었다.
Calendar는 추상클래스라서 객체를 직접 생성할 수 없고, 메소드를 통해서 완전히 구현된 클래스의 인스턴스를 얻어야 한다.
Calendar cal = new Calendar(); // 에러. 추상클래스는 인스턴스를 생성할 수 없다.
Calendar cal = Calendar.getInstance(); // getInstance()는 Calendar 클래스의 인스턴스를 반환
아래 코드는 Java에서 작성한 코드다.
package Calendar;
import java.util.Calendar;
public class Calendar_EX {
public static void main(String[] args) { // Calendar Class 를 사용한 달력 구현을 위한 기본사항 알아보기 int year = 2019; int month = 2; int trailingSpaces = 0; int daysInPrevMonth = 0; int prevYear = 0; int prevMonth = 0; int DAY_OFFSET = 1; Calendar cal = Calendar.getInstance(); //Calendar 객체 생성(시스템의 현재 날짜와 시간 정보) System.out.println("today is "+cal.getTime()); // 현재시각을 알려주는 메소드 System.out.println("올해 년도 : " + cal.get(Calendar.YEAR)); System.out.println("이번 달(0~11, 0:1월): " + cal.get(Calendar.MONTH)); System.out.println("이번 달의 오늘 날짜 : " + cal.get(Calendar.DATE)); int LastDays = cal.getActualMaximum(Calendar.DATE); //해당 월 마지막 날짜 System.out.println("이번달의 마지막날짜 : "+LastDays); // 현재시각을 알려주는 메소드 int dayofweek = cal.get(Calendar.DAY_OF_WEEK); // 현재 요일 (일요일은 1, 토요일은 7) System.out.println("이번달 오늘날짜 요일 값 : "+dayofweek); // 오늘날짜의 요일값을 반환 System.out.println("이번년도의 몇째 주 : "+ cal.get(Calendar.WEEK_OF_YEAR)); System.out.println("이번달의 몇째 주 : "+ cal.get(Calendar.WEEK_OF_MONTH)); System.out.println("이번달의 몇째 주 : " + cal.get(Calendar.DAY_OF_WEEK_IN_MONTH)); System.out.println("현재 시간 : "+ cal.get(Calendar.HOUR)); // 현재 시간 (12시간제) System.out.println("현재 시간 : "+ cal.get(Calendar.HOUR_OF_DAY)); // 현재 시간 (24시간제) System.out.println("오전_오후(0:오전, 1:오후): " + cal.get(Calendar.AM_PM)); System.out.println("현재 분 : "+ cal.get(Calendar.MINUTE)); System.out.println("현재 초 : "+ cal.get(Calendar.SECOND)); String time = String.valueOf(cal.get(Calendar.HOUR)) + "시 " + String.valueOf(cal.get(Calendar.MINUTE)) + "분 " + String.valueOf(cal.get(Calendar.SECOND)) + "초" ; System.out.println("현재 시간 : "+ time); //set메소드를 통해 연도 월 일 을 설정 cal.set(Calendar.YEAR, Integer.valueOf(year)); cal.set(Calendar.MONTH, Integer.valueOf(month)-1); // 0 ~ 11월이라 1을 빼줌 cal.set(Calendar.DAY_OF_MONTH, 1); // 지정 월의 날짜 // 년 월 일을 나누어서 표현했고, 아래는 하나로 년월일을 지정 //cal.set(year,month-1,1); // 0 ~ 11월로 인식하므로 - 1, 입력된 년월
LastDays = cal.getActualMaximum(Calendar.DATE); //지정한 월의 마지막 날짜 System.out.println("SET 지정달 마지막날짜 : "+LastDays);
dayofweek = cal.get(Calendar.DAY_OF_WEEK); // 지정날짜 요일 (일요일은 1, 토요일은 7) System.out.println("SET 지정달 week 값 : "+dayofweek); // 지정날짜의 1일의 요일 값을 표시 trailingSpaces = dayofweek -1; prevMonth = month -1; prevYear = year; daysInPrevMonth = getLastDay(prevMonth,prevYear); System.out.println("SET 이전달 마지막날짜 : "+daysInPrevMonth); // 이번달 1일 이전 공백 부분을 채우기 위한 이전달 날짜 for (int i = 0; i < trailingSpaces; i++) { System.out.println("SET 이전달 날짜 : "+ String.valueOf((daysInPrevMonth - trailingSpaces + DAY_OFFSET) + i)); } }
// 달의 마지막 일을 구함 private static int getLastDay(int month, int year) { if (month == 4 || month == 6 || month == 9 || month == 11) { return 30; } else if (month == 2 && isLeapYear(year) == true) { return 29; } else if (month == 2 && isLeapYear(year) == false) { return 28; } else { return 31; } }
// 해당 년도가 윤년인지 판별 private static boolean isLeapYear(int year) { return (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)); } }
|