[JAVA]Chapter10 날짜와 시간 &형식화 - 연습문제

WOOK JONG KIM·2022년 9월 26일

자바의 정석

목록 보기
13/25
post-thumbnail

10-1

Caldendar클래스와 SimpleDateFormat클래스를 이용해서 2020년의 매월 두 번재 일요일의 날짜를 출력하시오.

내 코드

package ch10;

import java.text.SimpleDateFormat;
import java.util.*;

public class Ex10_11 {

	public static void main(String[] args) {

		SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd은 2번째 일요일입니다.");
		
		Calendar cal = Calendar.getInstance();
		
		
		for (int i = 1; i<=12;i++)
		{
			cal.set(2020,i,1);
			cal.add(Calendar.DATE , -1);
			int end_day = cal.get(Calendar.DATE);
			
			int count = 0;
			
			for(int j =1; j< end_day ; j++)
			{
				cal.set(2020, i-1, j);
				
				if(cal.get(Calendar.DAY_OF_WEEK) == 1 )
				{	
					count++;
					if(count == 2) {
						Date d = new Date(cal.getTimeInMillis());
						System.out.println(sdf1.format(d));
						break;
					}
					
				}
			}
		}
	}

}

모범 답안

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class Ex10_11_2 {

	public static void main(String[] args) {
		
		Calendar cal = Calendar.getInstance();
		cal.set(2020,0,1); // 2020/01/01
		
		for(int i = 0; i < 12; i++)
		{
			// 복잡도 생각해서 for문 한개 더 안쓰고 싶다면 이렇게 규칙을 찾자!
			int weekday = cal.get(Calendar.DAY_OF_WEEK);
			int second_sun = (weekday == 1)? 8:16 - weekday;
			
			cal.set(2020, i, second_sun);
			
			Date d = cal.getTime();
			System.out.println(new SimpleDateFormat("yyyy-MM-dd은 F번째 E요일입니 다.").format(d));
			
			// 날짜를 다음달 1일로 변경
			cal.add(Calendar.MONTH, 1); 
			cal.set(Calendar.DAY_OF_MONTH,1);

		}

	}
}

10-2

화면으로 부터 날짜를 "201705/11"의 형태로 입력받아서 무슨 요일인지 출력하는 프로그램 작성(단. 입력된 날짜의 형식이 잘못된 경우 메세지를 보여주고 다시 입력)

import java.util.*; 
import java.text.*;

class Exercise10_2 {
	public static void main(String[] args) {
	String pattern = "yyyy/MM/dd";
	String pattern2 = "입력하신 날짜는 E요일입니다."; // 'E'는 일~토 중의 하나가 된다.

	DateFormat df = new SimpleDateFormat(pattern); 			DateFormat df2 = new SimpleDateFormat(pattern2);
	Scanner s = new Scanner(System.in);
	Date inDate = null;
	do {
		System.out.println("날짜를 " + pattern
		+ "의 형태로 입력해주세요.(입력예:2017/05/11)");
		try {
			System.out.print(">>");
			inDate = df.parse(s.nextLine()); // 입력받은 날짜를 Date로 변환한다. break; // parse()에서 예외가 발생하면 이 문장은 수행되지 않는다.
		} catch(Exception e) {} } while(true);
			System.out.println(df2.format(inDate)); } // main
}

10-3

어떤 회사의 월급날이 매월 21일이다.

두 날짜 사이에 월급 날이 몇번 있는지 계산해서 반환하는 메서드 작성

package ch10;

import java.util.*;
import java.text.*;

public class Ex10_13 {
	
	static int paycheckCount(Calendar from, Calendar to)
	{
		if(from == null || to == null) {
			return 0;
		}
		
		if(from.equals(to) && from.get(Calendar.DAY_OF_MONTH) == 21 ) {
			return 1;
		}
		
		int fromYear = from.get(Calendar.YEAR);
		int fromMon = from.get(Calendar.MONTH);
		int fromDay = from.get(Calendar.DAY_OF_MONTH);
		
		int toYear = to.get(Calendar.YEAR);
		int toMon = to.get(Calendar.MONTH);
		int toDay = to.get(Calendar.DAY_OF_MONTH);
		
		
		
		int monDiff = (toYear * 12 + toMon) - (fromYear * 12 - fromMon);
		
		if(monDiff < 0) { return 0;}
		
		if(from.get(Calendar.DAY_OF_MONTH) <= 21 && to.get(Calendar.DAY_OF_MONTH) >= 21) {
			monDiff += 1;
		}
		if(from.get(Calendar.DAY_OF_MONTH) > 21 && to.get(Calendar.DAY_OF_MONTH) < 21) {
			monDiff -= 1;
		}
		
		return monDiff;
	}
	
	static void printResult(Calendar from, Calendar to)
	{
		Date fromDate = from.getTime();
		Date toDate = to.getTime();
		
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		System.out.print(sdf.format(fromDate) + "~" + sdf.format(toDate) + ":");
		System.out.println(paycheckCount(from,to));
	}
	
	public static void main(String[] args) 
	{
		Calendar fromCal = Calendar.getInstance();
		Calendar toCal = Calendar.getInstance();
		
		fromCal.set(2020,0,1);
		toCal.set(2020,0,1);
		printResult(fromCal, toCal);
		
		fromCal.set(2020,0,21);
		toCal.set(2020,0,21);
		printResult(fromCal, toCal);
		
		fromCal.set(2020,0,1);
		toCal.set(2020,2,1);
		printResult(fromCal, toCal);
		
		fromCal.set(2020,0,1);
		toCal.set(2020,2,23);
		printResult(fromCal, toCal);
		
		fromCal.set(2020,0,23);
		toCal.set(2020,2,21);
		printResult(fromCal, toCal);
		
		fromCal.set(2021,0,22);
		toCal.set(2020,2,21);
		printResult(fromCal, toCal);
	}

}

10-4

자신이 태어난 날부터 지금까지 며칠이 지났는지 계산해서 출력하시오

package ch10;

import java.text.*;
import java.util.*;

public class Ex_10_14 {

	public static void main(String[] args) {
		String pattern = "yyyy-MM-dd";  
		
		Calendar date1 = Calendar.getInstance();
		Calendar date2 = Calendar.getInstance();
		
		date1.set(1998,7, 29);
		date2.set(2022,8, 26);

		DateFormat df = new SimpleDateFormat(pattern); 
		
		System.out.println("birth day="
				+ df.format(date1.getTimeInMillis()));
		
		System.out.println("today ="
				+ df.format(new Date(date2.getTimeInMillis())));
		
		long difference =
				(date2.getTimeInMillis() - date1.getTimeInMillis())/1000;
				System.out.println(difference/(24*60*60) +"days");//1일 =24*60*60
	}

}
profile
Journey for Backend Developer

0개의 댓글