basic/java 실습

day 17 예제 및 문제 - Calendar class, Date class

못지(Motji) 2021. 5. 17. 23:27

📖 Calendar class 예제

getInstance(), get(), set()에 사용되는 상수 사용해보기

package day17;
import java.util.Calendar;
public class CalEx01 {

	public static void main(String[] args) {
		
		Calendar now = Calendar.getInstance(); // Calendar 타입 변수 now에 calendar 클래스 메소드 사용할 수 있도록 값얻어와서 넣기
		System.out.println(now); // 출력하면 위치부터 날짜, 시간 등등 영어로 샬라샬라 나옴
		
		// 년도
		int year = now.get(Calendar.YEAR); // YEAR 상수 가져와서 int year에 값 초기화, int로 받은 이유는 리턴타입이 int기 때문에
		int month = now.get(Calendar.MONTH); // MONTH 0월 ~ 11월
		System.out.println(year);
		System.out.println(month);
		int day_of_week = now.get(Calendar.DAY_OF_WEEK);
		System.out.println(day_of_week);
		// 일(1) 월(2) 화(3) 수(4) 목(5) 금(6) 토(7)
		
	}
}

🖥️ console 출력 화면

🔈 Canlendar class는 java.util pakcage 안에 포함되어 있으며, 추상클래스로 객체를 생성할 수 없어서 getInstanco() 메소드를 통해 값을 얻어서 사용할 수 있다.

📖 Calendar class 예제 (2)

메소드를 생성하여 원하는 출력형태로 출력해보기

package day17;
import java.util.Calendar;
public class CalEx02 {

	public static void main(String[] args) {
		
		Calendar date1 = Calendar.getInstance(); // 현재
		Calendar date2 = Calendar.getInstance();
		date2.set(2021, 11, 25); // 원하는 날로 값 세팅하기
		System.out.println(dateToString(date1)); // 원하는 출력형태 메소드 만들어 값넣어 출력하기
		System.out.println(dateToString(date2));
		// 출력형태 ????년 ??월 ??일 ?요일
	}
	
	public static String dateToString(Calendar date) { // calendar 타입의 변수 매개변수로 받기
		// date.get(Calendar.DAY_OF_WEEK) > 1~7 > 인덱스 번호로 활용
		final String[] DAY_OF_WEEK = {"","일","월","화","수","목","금","토"};
		
		return date.get(Calendar.YEAR) + "년 " +(date.get(Calendar.MONTH)+1) + "월 "
				+ date.get(Calendar.DATE)+ "일 " + 
				DAY_OF_WEEK[date.get(Calendar.DAY_OF_WEEK)]+ "요일";
	}
}

🖥️ console 출력 화면

🔈 Calendar class에 있는 상수를 사용하려면 클래스명.상수로 바로 사용

📖 Calendar class 예제 (3)

밀리초를 사용하여 두시간 사이의 차이 알아내기

package day17;
import java.util.Calendar;
public class CalEx03 {

	public static void main(String[] args) {

		Calendar time1 = Calendar.getInstance();
		Calendar time2 = Calendar.getInstance();
		time1.set(Calendar.HOUR_OF_DAY, 10); // 시간세팅
		time1.set(Calendar.MINUTE, 20); // 분세팅
		time1.set(Calendar.SECOND, 30); // 초세팅
		
		time2.set(Calendar.HOUR_OF_DAY, 20);
		time2.set(Calendar.MINUTE, 30);
		time2.set(Calendar.SECOND, 10);
		
		System.out.println("time1: " + time1.get(Calendar.HOUR_OF_DAY) + "시 "
				+ time1.get(Calendar.MINUTE) + "분 " + time1.get(Calendar.SECOND) + "초");
		System.out.println("time2: " + time2.get(Calendar.HOUR_OF_DAY) + "시 "
				+ time2.get(Calendar.MINUTE) + "분 " + time2.get(Calendar.SECOND) + "초");
		// getTimeInMillis() > 시간을 밀리초 단위로 변경해줌 (1초 == 1000밀리초)
		long difference = (time2.getTimeInMillis() - time1.getTimeInMillis())/1000; // time2와 time1는 몇초차이가 나는지 구하기
		System.out.println(difference);
		
		final int[] TIME_UNIT = {3600, 60, 1};
		final String[] TIME_UNIT_NAME = {"시간","분","초"};
		
		String tmp= ""; // 문자로 변환하기 위해서
		for(int i = 0; i < TIME_UNIT_NAME.length; i++) {
			tmp += difference/TIME_UNIT[i] + TIME_UNIT_NAME[i]; // diff/3600 + 시간
			difference %= TIME_UNIT[i]; // 시간으로 나눠서 남은값을 분,초로 분리해야 하기 때문에
		}
		System.out.println("시분초로 변환하면: " + tmp);
	}
}

🖥️ console 출력 화면

🔈

1000밀리초 > 1초 / 60000밀리초 > 1분 / 3600000밀리초 > 1시간

60초 > 1분 / 3600초 > 1시간

📖 Calendar class 예제 (4)

roll() 메소드와 add() 메소드의 차이 알아보기

package day17;
import java.util.Calendar;
public class CalEx04 {

	public static void main(String[] args) {

		Calendar date = Calendar.getInstance();
		date.set(2021, 4, 31); > 월은 0~11 이니까 2021년 5월 31일로 세팅됨
		System.out.println(dateToString(date));
		System.out.println("- 1일 후 -");
		date.add(Calendar.DATE, 1); // 저장된 달력 필드의 일수를 하루 더함
		System.out.println(dateToString(date));
		
		System.out.println("- 3달 전 -");
		date.add(Calendar.MONTH, -3);
		System.out.println(dateToString(date));
		
		System.out.println("- 31일 후 roll -");
		date.roll(Calendar.DATE, 31); // 날짜만 돌아감
		System.out.println(dateToString(date));
		System.out.println("- 31일 후 add -");
		date.add(Calendar.DATE, 31);
		System.out.println(dateToString(date));
	} 
	
	public static String dateToString(Calendar date) {
		// date.get(Calendar.DAY_OF_WEEK) > 1~7 > 인덱스 번호로 활용
		final String[] DAY_OF_WEEK = {"","일","월","화","수","목","금","토"};
		
		return date.get(Calendar.YEAR) + "년 " +(date.get(Calendar.MONTH)+1) + "월 "
				+ date.get(Calendar.DATE)+ "일 " + 
				DAY_OF_WEEK[date.get(Calendar.DAY_OF_WEEK)]+ "요일";
	}
}

🖥️ console 출력 화면

🔈

add(int field, int amount) > 지정된 달력 필드에 지정한 시간을 더하거나 뺀다. 양수는 더하고 음수는 뺌

roll(int field, int amount) > 지정된 달력 필드에 지정한 시간을 더하거나 빼는데 더 큰 필드는 건들이지 않고 작성한 시간 필드만 해당됨. Ex) DATE를 지정하였다면 MONTH, YEAR에는 영향을 주지 않는 것

📘 Calendar class 문제 - 디데이 계산기 만들기

🖥️ console 출력 화면

🔈

📖 Date class 예제 - Date()

package day17;

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

public class DateEx01 {

	public static void main(String[] args) {
		Date day = new Date(); // new로 객체 생성하여 사용
		System.out.println(day); // Calender class에 비해 바로 알아볼 수 있게 설정됨
		System.out.println(day.getMonth() + 1);
		
		//원하는 날짜 포맷으로 출력하고 싶을때 (날짜 데이터는 없다)
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy년 MM월 dd일 입니다.");
		System.out.println(sdf.format(day)); // 매개변수를 Date타입으로도 받기에 넣을 수 있음
	}
}

🖥️ console 출력 화면

🔈 eclipse 에서는 Calender class 사용을 권고 하지만 간편하게 쓸 수 있는 Date를 더 많이 쓴다고 한다.

SimpleDateFormat() > 원하는 날짜 포맷으로 출력하고 싶을때

📘 Date class 문제 - 날짜 입력받아 현재 시간과의 차이 출력

package day17;

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

public class DateEx03 {

	public static void main(String[] args) {
		// 날짜 입력받아 현재 시간과의 차이 출력
		String pattern = "yyyy/MM/dd"; // 어떤 형태로 입력할지 예시로 출력할것 저장
		DateFormat df = new SimpleDateFormat(pattern); // 부모 타입으로 형변환 pattern로 초기화
		Scanner sc = new Scanner(System.in);
		
		Date date = null; // 아무값도 안들어 있도록 Date 타입 변수 초기화 
		System.out.println("날짜를 " + pattern + "의 형태로 입력해주세요>> "); // 메세지 띄우기
		String str = sc.nextLine(); // 날짜 입력받아서 str에 값 저장
		try {
		date = df.parse(str); // 패턴에 맞는 문자열을 주면, Date 객체로 변환 > 리턴 값 Date
		System.out.println(date);
		}catch(Exception e) {
			e.printStackTrace();
		}
		
		// Date > Calendar
		Calendar cal = Calendar.getInstance();
		cal.setTime(date); // 위에 입력받은 값으로 세팅
		Calendar today = Calendar.getInstance(); // 현재날짜 값 넣어둘 필드
        	// Math.abs(): 절대값 반환
		long day = Math.abs(((cal.getTimeInMillis()- today.getTimeInMillis())/(24*60*60*1000)));
        	// 밀리초로 값 변환하여 계산해주기,
		System.out.println("차이: " + day + "일");
	}
}

🖥️ console 출력 화면

파란글자가 입력한 문자 입니다.

🔈  보면서 이해는 가능하나, 아직 실제로 만들진 못할 것 같다. 많이보고 써보는게 답인듯!