.
.
앞에서 한 코드를 종합하여 작성하였다.
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
반응형
'Java > 본격 Java 퀴즈 기초' 카테고리의 다른 글
[Java] 책 정보 출력하기 (클래스 배열 이용) (0) | 2020.07.09 |
---|---|
[Java] 사원정보 출력하기 (Composition(포함)관계 이용) (0) | 2020.07.09 |
[Java] 달력 출력하기 - 윤년 확인하기 (0) | 2020.07.08 |
[Java] 달력 출력하기 (0) | 2020.07.08 |
[Java] 계좌 운영하기 (0) | 2020.07.08 |