본문 바로가기

Java

버전별 만년달력 (미완)

ver1.

1년 1월달 달력을 보고 원리를 이해한다 
2019.7 까지의 날수를 구하려면 - 1년으로부터 며칠째인지를 알면 구할 수 있음  
2018x365 
+ 윤년인 날수를 계산해서 +1씩
+ 2019년 1월~6월 날수
+ (+1) : 내가 구하고자 하는 달의 첫날
7월1일까지의 합계를 7로 나눈 나머지가 0이면 일요일 1이면 월요일...
 

package com.day5;

import java.util.Calendar;
import java.util.Scanner;

public class Test7 {

	public static void main(String[] args) {
    
		Scanner sc= new Scanner(System.in);
		Calendar now = Calendar.getInstance();
		
		// 월별 날수를 배열에 저장
		int months[] = {31,28,31,30,31,30,31,31,30,31,30,31};
		
		int y,m,nalsu,i,week;
		
		do {
			System.out.print("년도?"); //2019
			y=sc.nextInt();
		}while(y<1); //~안돼요
		
		do {
			System.out.print("월?"); //7월
			m=sc.nextInt();
		}while(m<1&&m>12);
		
		//윤년에 따른 2월의 날수, 윤년이면 28을 29로 바꿈
		//올해가 윤년인지 확인 
		if (y%4 == 0 && y%100 != 0 || y%400 ==0)
			months[1]=29;
		
		//1년 1월1일부터 ~ 현재년의 전년도 12월 31일까지의 날수 
		// + 2018년까지의 윤년 수
		nalsu=(y-1)*365 + (y-1)/4 - (y-1)/100 + (y-1)/400; //공식임 and(-) or(+)
		//int yun = (y-1)/4 - (y-1)/100 + (y-1)/400;
		
        
		// 2019 1월~6월까지의 날수 + 2019년 6월 30일까지의 날수 + 1 = 2019/7/1까지의 날수 구할 차례
		// 그 수를 %7 해서 나온 수에 의해 요일이 정해짐 
		
		//2019. 1~6월까지의 날수 더하기 
		for(i=0;i<m-1;i++) {
			nalsu+=months[i]; 
		}
		
		nalsu += 1; // 2019.7.1 까지의 날수
		
		//주의 수 (0 1 2 3 4 5 6)
		week= nalsu%7; //1일때는 월요일 ,2일때는 화요일
		
		
		System.out.println("\n  일  월  화  수  목  금  토"); //2byte+2byte
		System.out.println("------------------------------");
		//공백처리
		//week가 있는곳의 전까지만 공백을 찍음 
		for (i=0; i<week; i++) {
			System.out.print("    ");  // 공백 4칸 (2byte+2byte)
		}
		for (i=1; i<months[m-1]; i++) {
			System.out.printf("%4d",i); // i를 출력할건데 4byte공간으로 만들어라
			week++; //week를 계속 증가시켜서 7로 나눠 딱 떨어지면 다음으로 줄바꿈
			if(week%7==0)
				System.out.println();
		}
		
		if(week%7!=0) {
			System.out.println();
		}
		
		System.out.println("------------------------------");

	}

}

 

 

ver2.