Notice
Recent Posts
Recent Comments
Link
Tags
more
«   2024/11   »
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
Archives
Today
Total
관리 메뉴

JongDDA의 한걸음 한걸음씩

[Java] 날짜와 시간, Calendar 클래스 본문

개발/Java

[Java] 날짜와 시간, Calendar 클래스

종따 2021. 8. 27. 21:24
728x90

Calendar 클래스

Calendar 클래스는 추상클래스이기 때문에 직접 객체를 생성할 수 없고, 메서드를 통해서 완전히 구현된 클래스의 인스턴스를 얻어야 한다.

Calendar cal = new Calendar(); // 애러, 추상클래스는 인스턴스 생성 불가!

Calendar cal = Calendar.getInstance(); // Calendar 클래스의 인스턴스 반환

 

EX)

import java.util.Calendar;

public class CalendarEx {
	public static void main(String[] args) {
		
		Calendar today = Calendar.getInstance();
		// 2021년 08월 27일 기준
		System.out.println("이 해의 년도 : " + today.get(Calendar.YEAR));
		System.out.println("월 : " + today.get(Calendar.MONTH));
		System.out.println("일 : " + today.get(Calendar.DATE));
		System.out.println("일 : " + today.get(Calendar.DAY_OF_MONTH)); // DATE 와 DAY_OF_MONTH는 같다.
		System.out.println("요일 : " + today.get(Calendar.DAY_OF_WEEK));
		// 1: 일요일, 2:월요일 3: 화요일 ... 7: 토요일
		System.out.println("이 달의 몇번째 요일 : " + today.get(Calendar.DAY_OF_WEEK_IN_MONTH));
		System.out.println("오전? 오후? : " + today.get(Calendar.AM_PM)); // 0: 오전 1: 오후
		System.out.println("시간(0~11) : " + today.get(Calendar.HOUR)); 
		System.out.println("시간(0~23) : " + today.get(Calendar.HOUR_OF_DAY)); 
		System.out.println("분(0~59) : " + today.get(Calendar.MINUTE)); 
		System.out.println("초(0~59) : " + today.get(Calendar.SECOND)); 
		System.out.println("1000분의 1초(0~999) : " + today.get(Calendar.MILLISECOND)); 
		
		System.out.println("이 달의 마지막 날(일수) : " + today.getActualMaximum(Calendar.DATE));
	}
}

 

EX2)

import java.util.Calendar;

public class CalendarEx2 {
	public static void main(String[] args) {
		final String[] DAY_OF_WEEK = {"","일","월","화","수","목","금","토"};
		
		Calendar date1 = Calendar.getInstance();
		Calendar date2 = Calendar.getInstance();
	
		date1.set(2021, 0, 1); // 2021년 1월 1일
		System.out.println("date1은 " + toString(date1) + DAY_OF_WEEK[date1.get(Calendar.DAY_OF_WEEK)] 
				+ "요일 입니다.");
		System.out.println("오늘(date2)은 " + toString(date2) + DAY_OF_WEEK[date2.get(Calendar.DAY_OF_WEEK)] 
				+ "요일 입니다.");
		// 두 날짜 차이
		// getTimeInMillis() 로 1000분의 1초 단위로 변환하여 계산
		long difference = (date2.getTimeInMillis() - date1.getTimeInMillis())/1000;
		System.out.println("date1(2021년 1월 1일) 과 지금까지 " + difference + "초가 지났습니다.");
		System.out.println("일(day)수로 계산하면 " + difference/(24*60*60) + "일 지났습니다.");
		
	}
	public static String toString(Calendar date) {
		return date.get(Calendar.YEAR) + "년 " + (date.get(Calendar.MONTH)+1) + "월 "
				+ date.get(Calendar.DATE) + "일 ";
	}
}

 

EX3)

import java.util.Calendar;

public class CalendarEx3 {
	public static void main(String[] args) {

		final int[] TIME_UNIT = { 3600, 60, 1 };
		final String[] TIME_UNIT_NAME = { "시간 ", "분 ", "초 " };

		Calendar time1 = Calendar.getInstance();
		Calendar time2 = Calendar.getInstance();

		// time1을 10시 20분 30초로 설정
		time1.set(Calendar.HOUR_OF_DAY, 10);
		time1.set(Calendar.MINUTE, 20);
		time1.set(Calendar.SECOND, 30);
		// time2을 20시 10분 30초로 설정
		time2.set(Calendar.HOUR_OF_DAY, 20);
		time2.set(Calendar.MINUTE, 10);
		time2.set(Calendar.SECOND, 30);

		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) + "초");
	
		long difference = Math.abs(time2.getTimeInMillis() - time1.getTimeInMillis())/1000;
		System.out.println("time1 과 time2의 차이는 " + difference +"초 입니다.");
		
		String tmp = "";
		for(int i=0; i< TIME_UNIT.length; i++) {
			tmp += difference/TIME_UNIT[i] + TIME_UNIT_NAME[i];
			difference %= TIME_UNIT[i];
		}
		System.out.println("시,분,초로 계산하면 " + tmp +"입니다.");
	}
	
}

 

EX4) 

import java.util.Calendar;

public class CalendarEx4 {
	public static void main(String[] args) {
		Calendar date = Calendar.getInstance();
		date.set(2021, 8, 27); // 2021년 8월 27일

		System.out.println("----- 현재 ---------");
		System.out.println(toString(date));
		System.out.println("----- 1일 후 -------");
		date.add(Calendar.DATE, 1);
		System.out.println(toString(date));
		
		System.out.println("----- 6달 전 -------");
		date.add(Calendar.MONTH, -6);
		System.out.println(toString(date));
		// roll의 경우 다른 필드에 영향을 미치지 않는다. 
		// 아래와 깉이 다음 달로 넘어가도 월 필드를 바꾸지 않고 일 필드만 바뀐다.
		System.out.println("----- 31일 후(roll) -------");
		date.roll(Calendar.DATE, 31);
		System.out.println(toString(date));
		
		System.out.println("----- 31일 후(add) -------");
		date.add(Calendar.DATE, 31);
		System.out.println(toString(date));
	}
	public static String toString(Calendar date) {
		return date.get(Calendar.YEAR) + "년 " + (date.get(Calendar.MONTH)+1) + "월 "
				+ date.get(Calendar.DATE) + "일 ";
	}
}

 

EX5) 달력만들기

import java.util.Calendar;
// 달력만들기
public class CalendarEx5 {
	public static void main(String[] args) {
		
		int year = 2021;
		int month = 8;
		int START_DAY_OF_WEEK = 0;
		int END_DAY = 0;
		
		Calendar sDay = Calendar.getInstance(); // 시작일
		Calendar eDay = Calendar.getInstance(); // 끝일
		
		sDay.set(year, month-1, 1); 
		eDay.set(year, month, 1);
		
		eDay.add(Calendar.DATE, -1);
		// 첫번째 요일이 무슨 요일인지
		START_DAY_OF_WEEK = sDay.get(Calendar.DAY_OF_WEEK);
		// eDay에 지정된 날짜
		END_DAY = eDay.get(Calendar.DATE);
		
		System.out.println("      " + year + "년 " + month + "월");
		System.out.println(" SU MO TU WE TH FR SA");
		
		for(int i=1; i < START_DAY_OF_WEEK; i++) {
			System.out.print("  ");
		}
		for(int i=1, n= START_DAY_OF_WEEK; i <= END_DAY; i++, n++) {
			System.out.print((i < 10)? "  "+ i : " " + i);
			if(n%7 == 0) System.out.println();
		}
	}
}

 

 

 

 

728x90
반응형

'개발 > Java' 카테고리의 다른 글

[Java] 네트워킹  (0) 2021.11.26
[Java] 예외처리(exception handling)  (0) 2021.08.23
[Java] java.lang 패키지 & util classes  (0) 2021.08.21
[Java] 내부 클래스(Inner class)  (0) 2021.08.20
[Java] 입출력(I/O)  (0) 2021.08.19
Comments