Calendar 와 Date 필드, 활용, 달력 만들기

dewdew·2022년 5월 26일
1

JAVA

목록 보기
3/3

출처 : 유튜브 [ 자바의 정석-기초편 ] 을 보고 정리 작성한 자료입니다.
👉 클릭! 유튜브 링크

Calendar 사용

Calendar 는 추상 클래스라 new 로 객체 생성을 하는 것이 아니다. getInstance() 로 가져온다.

  • 예시
// 현재 날짜와 시간으로 셋팅
Calendar cal = Calendar.getInstance(); 

// 올해가 몇년인지
int thisYear = cal.get(Calendar.YEAR); 

// 이 달의 마지막날
int lastDayOfMonth = cal.getActualMaximum(Calendar.DATE);

사용하는 필드 (가져오기)

< Calendar > | get(Calendar.필드)
MONTH 0:1월
WEEK_OF_YEAR 1월1일 ~ 지금
WEEK_OF_MONTH 그 달의 몇 번째 주
DAY_OF_MONTH 그 달의 몇 번째일
DAY_OF_YEAR 그 해의 몇 번째일
DAY_OF_WEEK 요일 1:일요일
DAY_OF_WEEK_IN_MONTH 그 달의 몇 번째 요일


< Date >
HOUR
HOUR_OF_DAY
MINUTE
SECOND
MILLISECOND
ZONE_OFFSET GMT 기준 시차
AM_PM 0:오전

사용하는 필드 (셋팅하기)

< Calendar > | set(Calendar.필드, 값)

  • 예시
Calendar time = Calendar.getInstance();
time.set(thisYear, lastDayOfMonth, lastDayOfMonth); // 년, 월, 일
time.set(Calendar.HOUR_OF_DAY, 10); // 시, 분, 초
time.set(Calendar.MINUTE, 10);
time.set(Calendar.SECOND, 10);

수정하기
add() 특정 필드의 값 증가, 감소 [다른 필드에 영향 O]
roll() 위와 같음 [다른 필드에 영향 X]

  • 예시
Calendar date2 = Calendar.getInstance();
date2.clear();
date2.add(Calendar.DATE,-6); // 일이 바뀌면서 월이 바뀔 수 있음.

Clear()

  • clear() 모든 필드 초기화 OR clear(초기화부분) 부분 초기화
  • 날짜, 시간을 비교하기 전, 그리고 set() 하기 전에 clear()를 해주는 것이 좋다.
  • 왜냐하면, getInstance() 로 가져왔을때, ms 단위의 아주 작은 차이가 발생.
  • 이것 때문에 원하는 값을 얻지 못할 수 있으니 꼭 clear() 하자

연습 1 - 오늘 요일 구하기

final String[] DAY_OF_WEEK = {"","일","월","화","수","목","금","토"};
Calendar date1 = Calendar.getInstance();
System.out.println(DAY_OF_WEEK[date1.get(Calendar.DAY_OF_WEEK)]);

출력 > 목요일

연습 2 - 달력 만들기

int year = 2022;
int month = 5;
int START_DAY_OF_WEEK = 0;
int END_DAY = 0;

Calendar sDay = Calendar.getInstance(); // 시작일
Calendar eDay = Calendar.getInstance(); // 시작일
sDay.clear();
eDay.clear();
sDay.set(year, 4, 1); // 5월 1일
eDay.set(year, 5, 1); // 6월 1일

eDay.add(Calendar.DATE, -1); // 5월 31일

START_DAY_OF_WEEK = sDay.get(Calendar.DAY_OF_WEEK); // 그 달의 1일의 요일
END_DAY = eDay.get(Calendar.DATE); // 위에서 add 해서 수정한 eDay의 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.println("   ");
}

// 날짜 찍기
for (int i=1, n=START_DAY_OF_WEEK; i<END_DAY+1; i++, n++) {
	System.out.print((i<10)? "  "+i : " " +i);
	if(n%7==0) {
		System.out.println();
	}
}

출력 >

출처 : 유튜브 [ 자바의 정석-기초편 ] 을 보고 정리 작성한 자료입니다.
👉 클릭! 유튜브 링크

profile
새로운 것은 늘 짜릿해

0개의 댓글