본문 바로가기

Java/본격 Java 퀴즈 기초

[Java] 달력 출력하기 - 지정한 날짜 요일 확인하기

.

.

앞에서 한 코드를 종합하여 작성하였다.

package ex8;
import java.util.*;

public class Date {
	private int day, month, year;
	
	public Date(int year, int month, int day) {
		this.day = day;
		this.month = month;
		this.year = year;
	}
	public Date() {	} // default 생성자 - printCalader 이용

	public int getDay() { return day; }
	public void setDay(int day) { this.day = day; }
	public int getMonth() { return month; }
	public void setMonth(int month) { this.month = month; }
	public int getYear() { return year; }
	public void setYear(int year) { this.year = year; }
	public void getDate(int year, int month, int day) {}
	
	// 윤년 검사
	public boolean isLeapYear() {
		if((year / 4 == 0 && year / 100 != 0) || year / 400 == 0) {
			System.out.println("윤년입니다.");
			return true;	
		}
		else {
			System.out.println("윤년이 아닙니다.");
			return false;
		}
	}
	
	public boolean isLeapYear(int year) {
		if((year / 4 == 0 && year / 100 != 0) || year / 400 == 0) {
			System.out.println("윤년입니다.");
			return true;	
		}
		else {
			System.out.println("윤년이 아닙니다.");
			return false;
		}
	}
	
    // 정확히 입력했나 확인하는 메소드
	public boolean isValidDate() {
		if(year >= 1 && year <= 9999) {
			if(month >= 1 && month <= 12) {
				if(month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
					if(day < 1 || day > 31) {
						System.out.println("정확한 날짜를 입력해주세요.(1~31)");
						return false;
					}else {
						return true;
					}
				}else if(month == 4 || month == 6 || month == 9 || month == 11) {
					if(day < 1 || day > 30) {
						System.out.println("정확한 날짜를 입력해주세요.(1~30)");
						return false;
					}else {
						return true;
					}
				}else if(month == 2) {
					if(isLeapYear()) {
						if(day < 1 || day > 29) {
							System.out.println("정확한 날짜를 입력해주세요.(1~29)");
							return false;
						}
						else {
							return true;
						}
					}else if(!isLeapYear()){
						if(day < 1 || day > 28) {
							System.out.println("정확한 날짜를 입력해주세요.(1~28))");
							return false;
						}else {
							return true;
						}
					}
				}
			}else {
				System.out.println("정확한 월을 입력해주세요.(1~12)");
				return false;
			}
		}else {
			System.out.println("정확한 연도를 입력해주세요.(1~9999)");
			return false;
		}
		return true;
	}
	
    // 요일 출력 메소드
	public int getDayOfWeek() {
		int yearNum1 = 0, yearNum2 = 0, monthNum = 0;
		
		if((year >= 1700 && year < 1800) || (year >= 2100 && year < 2200)) {
			yearNum1 = 4;
			yearNum2 = year % 100;
		} 
		else if((year >= 1800 && year < 1900) || (year >= 2200 && year < 2300) ) {
			yearNum1 = 2;
			yearNum2 = year % 100;
		} 
		else if((year >= 1900 && year < 2000) || (year >= 2300 && year < 2400)) {
			yearNum1 = 0;
			yearNum2 = year % 100;
		} 
		else if((year >= 2000 && year < 2100) || (year >= 2400 && year < 2500)) {
			yearNum1 = 6;
			yearNum2 = year % 100;
		}else {
			System.out.println("유효하지 않은 년도 입니다.");
		}
		
		if(isLeapYear()) {
			switch(month) {
			case 10 :
				monthNum = 0; break;
			case 3 : case 11 :
				monthNum = 3; break;
			case 1 : case 4 : case 7 :
				monthNum = 6; break;
			case 5 : 
				monthNum = 1; break;
			case 6 : 
				monthNum = 4; break;
			case 2 : case 8 :
				monthNum = 2; break;
			case 9 : case 12 :
				monthNum = 5; break;
			}
		}else {
			switch(month) {
			case 1 :  case 10 :
				monthNum = 0; break;
			case 2 : case 3 : case 11 :
				monthNum = 3; break;
			case 4 : case 7 :
				monthNum = 6; break;
			case 5 : 
				monthNum = 1; break;
			case 6 : 
				monthNum = 4; break;
			case 8 :
				monthNum = 2; break;
			case 9 : case 12 :
				monthNum = 5; break;
			}
		}
		return (yearNum1 + yearNum2 + (yearNum2 / 4) + monthNum + day) % 7;
		// 0 일요일, 1 월요일, 2 화요일, 3 수요일, 4 목요일, 5 금요일, 6 토요일
	}
	
	public int getDayOfWeek(int year, int month, int day) {
		int yearNum1 = 0, yearNum2 = 0, monthNum = 0;
		
		if((year >= 1700 && year < 1800) || (year >= 2100 && year < 2200)) {
			yearNum1 = 4;
			yearNum2 = year % 100;
		} 
		else if((year >= 1800 && year < 1900) || (year >= 2200 && year < 2300) ) {
			yearNum1 = 2;
			yearNum2 = year % 100;
		} 
		else if((year >= 1900 && year < 2000) || (year >= 2300 && year < 2400)) {
			yearNum1 = 0;
			yearNum2 = year % 100;
		} 
		else if((year >= 2000 && year < 2100) || (year >= 2400 && year < 2500)) {
			yearNum1 = 6;
			yearNum2 = year % 100;
		}else {
			System.out.println("유효하지 않은 년도 입니다.");
		}
		
		if(isLeapYear()) {
			switch(month) {
			case 10 :
				monthNum = 0; break;
			case 3 : case 11 :
				monthNum = 3; break;
			case 1 : case 4 : case 7 :
				monthNum = 6; break;
			case 5 : 
				monthNum = 1; break;
			case 6 : 
				monthNum = 4; break;
			case 2 : case 8 :
				monthNum = 2; break;
			case 9 : case 12 :
				monthNum = 5; break;
			}
		}else {
			switch(month) {
			case 1 :  case 10 :
				monthNum = 0; break;
			case 2 : case 3 : case 11 :
				monthNum = 3; break;
			case 4 : case 7 :
				monthNum = 6; break;
			case 5 : 
				monthNum = 1; break;
			case 6 : 
				monthNum = 4; break;
			case 8 :
				monthNum = 2; break;
			case 9 : case 12 :
				monthNum = 5; break;
			}
		}
		return (yearNum1 + yearNum2 + (yearNum2 / 4) + monthNum + day) % 7;
		// 0 일요일, 1 월요일, 2 화요일, 3 수요일, 4 목요일, 5 금요일, 6 토요일
	}
	
	public String toString() {
		String dd, mm, yyyy;
		if(day < 10) {dd = "0" + Integer.toString(day);}
		else {dd = Integer.toString(day);}
		
		if(month < 10) {mm = "0" + Integer.toString(month);}
		else {mm = Integer.toString(month);}
		
		yyyy = Integer.toString(year);
		
		return dd + "/" + mm + "/" + yyyy;
	}
	
	public String toString(Date d) {
		String sentence = "";
		if(isValidDate()) {
			switch(getDayOfWeek()) {
			case 0 :
				sentence += d.year + "년 " + d.month + "월 " + d.day + "일 " + "일요일"; break;
			case 1 :
				sentence += d.year + "년 " + d.month + "월 " + d.day + "일 " + "월요일"; break;
			case 2 :
				sentence += d.year + "년 " + d.month + "월 " + d.day + "일 " + "화요일"; break;
			case 3 :
				sentence += d.year + "년 " + d.month + "월 " + d.day + "일 " + "수요일"; break;
			case 4 :
				sentence += d.year + "년 " + d.month + "월 " + d.day + "일 " + "목요일"; break;
			case 5 :
				sentence += d.year + "년 " + d.month + "월 " + d.day + "일 " + "금요일"; break;
			case 6 :
				sentence += d.year + "년 " + d.month + "월 " + d.day + "일 " + "토요일"; break;
			}
		}
		return sentence;
	}
	
}

.

.

package ex8;

public class TestDate {

	public static void main(String[] args) {
		Date date1 = new Date(2020, 3, 4);
		System.out.println(date1);
		System.out.println(date1.toString(date1));
		
		Date date_test = new Date();
		date_test.printCalander();
	}

}
728x90
반응형