프로그래밍/Java

Java 요일 구하기 계산 예제 / 소스 코드

Lou Park 2016. 4. 28. 19:04

1900년 1월 1일은 월요일이라는 점을 이용하여 요일 을 계산하는 프로그램이다.


아래 소스코드를 보면

1) 연/월/일을 입력 받는 main()

2) 구한 요일을 출력하는 PrintDay()

3) 그 달은 총 몇일인지 계산하여 리턴하는 MonthDays()

4) 그 날이 어떤 요일인지 계산하여 'X'요일을 리턴하는 DayofDate() 로 이루어져있다는 것을 알 수 있다.


계산 방법은 기준일자인 1900년 1월 1일로 부터 입력 받은 날짜까지 총 몇일 지났는지 알아낸다음,

그 날짜를 7로 나눈 나머지에 따라 일/월/화/수/목/금/토 요일을 계산하는 것이다.

일자 계산에는 1/3/5/7/8/10/12 월이라면 31일, 아니라면 30일, 평년 2월달이라면 28일, 윤년 2월달이라면 29일로 조건에 따라 날짜가 들어가도록 했다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
 
import java.util.Scanner;
 
public class DayCalc {
    public static void main(String[] args) {
        int year, day, month;
        Scanner scanner = new Scanner(System.in);
        //연,월,일을 입력받음
        do {
            System.out.println("연도를 입력하세요 : ");
            year = scanner.nextInt();
        } while (year < 1900);
        do {
            System.out.println("월을 입력하세요 : ");
            month = scanner.nextInt();
        } while (month < 1 || month > 12);
        do {
            System.out.println("일을 입력하세요 : ");
            day = scanner.nextInt();
        } while (day < 1 || day > 31);
        
        PrintDay(year, month, day);
    }
    public static void PrintDay(int year, int month, int day) {
        char dayOfWeek = DayofDate(year, month, day);
        System.out.println(year + "년 " + month + "월 " + day + "일은 " + dayOfWeek + "요일입니다." );
        
    }
    public static int MonthDays(int year, int month) {
        int dayOfMonth = 0;
        //윤년일 조건
        Boolean isLeapYear = ((year % 4 == 0) && (year % 100 !=0)) || year % 400 == 0;
        //31일 일 조건
        Boolean is31 = (month == 1|| (month == 3|| (month == 5|| (month == 7)
 || (month == 8|| (month == 10|| (month == 12);
        
        if (isLeapYear && month == 2) {
            dayOfMonth = 29;
        } else if (!isLeapYear && month == 2) {
            dayOfMonth = 28;
        } else if (is31) {
            dayOfMonth = 31;
        } else {
            dayOfMonth = 30;
        }
        return dayOfMonth;
    }
    public static char DayofDate(int year, int month, int day) {
        char dayOfWeek = 0;
        int totalDay = 0;
        for(int i = 1900; i <= year; i++) {
            //입력 년도 이전 까지는 12월 까지 다 더함
            if (i < year) {
                for(int j = 1; j <= 12; j++) {
                    totalDay += MonthDays(i, j);
                }
            //입력 년도는 입력 월 이전까지 더함
            } else {
                for(int j = 1; j < month; j++) {
                    totalDay += MonthDays(i, j);
                }
            }
        }
        //나머지 일 수를 구해진 전체 일수에 더함
        totalDay += day;
        //기준일인 1900년 1월 1일이 월요일이므로 
        switch (totalDay % 7) {
        case 0:
            dayOfWeek = '일';
            break;
        case 1:
            dayOfWeek = '월';
            break;
        case 2:
            dayOfWeek = '화';
            break;
        case 3:
            dayOfWeek = '수';
            break;    
        case 4:
            dayOfWeek = '목';
            break;
        case 5:
            dayOfWeek = '금';
            break;
        case 6:
            dayOfWeek = '토';
            break;    
        }
        return dayOfWeek;
    }
}
 
cs