3월 ~ 5월) 자바/숙쩨

16Day - DayCalculateApp / WantCalendarApp

첼로그 2023. 4. 20. 10:49

DayCalculateApp

package xyz.itwill.util;
// 키보드로 생년월일을 입력받아 오늘까지 살아온 날짜(일)을 계산하여 출력하는 프로그램 작성

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

// ex) 생년월일 입력 [ex. 2000-01-01] >> 2023-04-18
// [결과]태어난지 <1일>이 지났습니다.
// > 형식에 맞지 않는 생년월일을 입력한 경우 에러 메세지 출력 후 프로그램 종료
public class DayCalculateApp {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in); // 키보드로 값을 받아옴

        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date birthday = null; // 변수에 {블럭} 밖에 만들어야 소멸이 안됨.

        System.out.print("생년월일 입력 [ex. 2000-01-01] >> ");
        try {
            // 키보드로 입력받은 문자열을 Date 객체로 변환하여 저장 ▽
            // > 키보드로 입력받은 문자열이 SimpleDateFormat 객체에 저장된 패턴정보와 일치하지않을 경우
            // ParseException 발생 - 일반 예외이므로 반드시 예외처리
            birthday = dateFormat.parse(scanner.nextLine());
        } catch (ParseException e) {
            System.out.println("[에러]생년월일을 형식에 맞게 입력해 주세요");
            System.exit(0);
        }finally {
            scanner.close(); // 걍 경고 떨어져서 넣은거
        }
        // 살아온 날짜를 계산하여 출력
        long day = (System.currentTimeMillis()-birthday.getTime()) / ( 1000 * 60 * 60 * 24);
        System.out.println("[결과]태어난지 <"+ day +"일>이 지났습니다. ");

    }
}

생년월일 입력 [ex. 2000-01-01] >> 1972-05-22
[결과]태어난지 <18595일>이 지났습니다.

 


WantCalendarApp

package xyz.itwill.util;
import java.util.Calendar;
import java.util.Scanner;

// 키보드로 [년]과 [월]을 입력받아 해당 년월에 대한 달력을 출력하는 프로그램 작성
public class WantCalendarApp {
    public static void main(String[] args) {

        Scanner scanner=new Scanner(System.in);

        //키보드로 [년]과 [월]을 입력받아 저장
        System.out.print("년 입력 >> ");
        int year=scanner.nextInt();

        System.out.print("월 입력 >> ");
        int month=scanner.nextInt();

        scanner.close();

        //시스템의 현재 날짜와 시간이 저장된 Calendar 객체를 반환받아 저장
        Calendar calendar=Calendar.getInstance();

        //Calendar 객체에 저장된 날짜를 입력받은 년월에 대한 1일로 변경
        // => 월은 0~11 범위의 정수값으로 처리되므로 입력값에 1을 감소하여 변경
        calendar.set(year, month-1, 1);

        int week=calendar.get(Calendar.DAY_OF_WEEK);

        System.out.println("         "+year+"년 "+month+"월");
        System.out.println("============================");
        System.out.println("  일  월  화  수  목  금  토");
        System.out.println("============================");

        //[1일]을 출력하기 전까지의 요일을 공백으로 출력
        for(int i=1;i<week;i++) {
            System.out.print("    ");
        }

        //1일부터 [월]의 마지막 날짜까지 출력
        for(int i = 1; i<=calendar.getActualMaximum(Calendar.DATE); i++) {
            if(i <= 9) {
                System.out.print("   "+i);
            } else {
                System.out.print("  "+i);
            }

            week++;

            if(week % 7 == 1) {//다음 출력값(일)이 일요일인 경우
                System.out.println();
            }

        }
        System.out.println();
        System.out.println("============================");
    }
}

년 입력 >> 2023
월 입력 >> 4
         2023년 4월
============================
  일  월  화  수  목  금  토
============================
                           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
============================