JongDDA의 한걸음 한걸음씩
[Java] 날짜와 시간, Calendar 클래스 본문
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