자바의 Calendar 클래스 (DateTime)

자바의 날짜/시간 자료형

자바의 날짜 시간을 쓸 수 있는 방법은 총 3가지이다

1.Date 클래스
2. Calendar 클래스
3. time 패키지

여기서 time 패키지의 경우 JDK 8부터 사용이 가능하므로 구형 버전을 쓰는 회사나 개인의 경우 사용 할 수 없으며

1번 방법의 경우 기능이 너무 없어 잘 안 사용하기에..

2번 방법을 사용하는 경우가 꽤 있습니다.

Calendar 클래스 문법

우선 import 가 필요합니다
import java.util.Calendar;

그리고 객체 선언 (new)은 필요하지 않습니다.

예시 ) 현재 데이터 받기

Calendar c1 = Calendar.getInstance();

System.out.println(c1);

System.out.println();

java.util.GregorianCalendar[time=1705776588571,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Seoul",offset=32400000,dstSavings=0,useDaylight=false,transitions=30,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2024,MONTH=0,WEEK_OF_YEAR=4,WEEK_OF_MONTH=4,DAY_OF_MONTH=21,DAY_OF_YEAR=21,DAY_OF_WEEK=1,DAY_OF_WEEK_IN_MONTH=3,AM_PM=0,HOUR=3,HOUR_OF_DAY=3,MINUTE=49,SECOND=48,MILLISECOND=571,ZONE_OFFSET=32400000,DST_OFFSET=0]

출력 결과를 보면 뭐라뭐라 쭉 나열이 되어 있는데 현재 데이터에 대한 값들을 의미하며 여기서 본인이 필요한 데이터만 뽑아서 정리를 하여 사용하면 됩니다 .

System.out.println(c1.get(Calendar.YEAR)); // 2024년

System.out.println(c1.get(Calendar.MONTH) + 1); // 0 > 월(0~11) + 추가로 1 더함

System.out.println(c1.get(Calendar.DATE));// 5 > 일

System.out.println(c1.get(Calendar.HOUR)); // 11 > 시

System.out.println(c1.get(Calendar.HOUR_OF_DAY)); // 11 > 시(24H 표기법)

System.out.println(c1.get(Calendar.MINUTE)); // 9 > 분

System.out.println(c1.get(Calendar.SECOND)); // 35 > 초

System.out.println(c1.get(Calendar.MILLISECOND)); // 0.506 > 밀리초

System.out.println(c1.get(Calendar.AM_PM));// 0/1 > 오전/오후

System.out.println(c1.get(Calendar.DAY_OF_YEAR)); // 5 > 올해 5번째 날

System.out.println(c1.get(Calendar.DAY_OF_MONTH)); // 5 > 이번달 5번째 날

// 일요일이 1, 토요일이 7로 설정이 되어있음.

// 주차는 목요일을 포함하는 것을 기준으로 함

System.out.println(c1.get(Calendar.DAY_OF_WEEK)); // 6 > 이번주 6번째 날 (요일)

System.out.println(c1.get(Calendar.WEEK_OF_YEAR)); // 1 >올해 1번째 주

System.out.println(c1.get(Calendar.WEEK_OF_MONTH)); // 1 > 이번달 1번째 주

출력



시(12시간표기법)
시(24시간표기법)


초에 대한 0이하의 숫자 (밀리초)
오전 오후 (0 이면 오전 1이면 오후)
날짜 (올해 n번째 날 , 2월일 경우 1월의 날짜 + 2월 현재의 날짜 값)
날짜(이번달 n번째 날 )
요일 (이번주 기준 n번째 날 (일요일을 1 , 토요일을 7로 계산함))
년 기준 주차 (1주차 2주차 3주차 4주차, 2월로 가면 5주차 6주차 .... 출력)
달 기준 주차 (1,2,3,4,5주차)

이렇게 본인이 원하는 데이터를 Calendar.원하는 항목을 선택하여 가져올 수 있습니다.

예시) 오늘 날짜 출력

System.out.printf("오늘은 %d년 %d월 %d일입니다.\n", c1.get(Calendar.YEAR), (c1.get(Calendar.MONTH) + 1),c1.get(Calendar.DATE));

Calendar에서 MONTH는 0~ 11로 나오기 때문에 +1을 해야 일반적인 달력의 숫자 1~12가 나옵니다

get을 통해 현재 년도,월,일을 읽어 출력하였습니다.

예시) 현재 시각 출력

System.out.printf("지금은 %s %02d시 %02d분 %02d초 입니다.\n", c1.get(Calendar.AM_PM) == 0 ? "오전" : "오후",

c1.get(Calendar.HOUR), c1.get(Calendar.MINUTE), c1.get(Calendar.SECOND));

마찬가지로 현재 시각을 출력 할 수 있습니다.
출력

출력

get, set, add

Calendar를 쓰면 get과 set을 많이 쓰는데
get은 읽기 즉 지금의 시간을 가져올 때
set은 쓰기 즉 내가 원하는 시간

예시

Calendar christmas = Calendar.getInstance(); // 현재 시각

System.out.printf("%tF\n",christmas);
christmas.set(2024, 11, 25, 18, 30, 0);

System.out.printf("%tF %tT\n",christmas,christmas);

출력
set으로 년 월 일 시 분 초 모두 줄 수 있습니다.

또 값을 더하거나 뺄 수도 있습니다 .
예시



Calendar now = Calendar.getInstance();

System.out.printf("1일차 :%tF\n ", now ); //오늘 출력

now.add(Calendar.DATE, 99); // (기존 값 , 더할 값)

System.out.printf("100일 :%tF\n", now);

// 1주일 전

now = Calendar.getInstance();

now.add(Calendar.DATE, -7);

System.out.printf("일주일전: %tF\n", now);

//컵라면 > 3분 뒤

now = Calendar.getInstance();

now.add(Calendar.MINUTE, 3);

System.out.printf("3분 뒤 : %tT\n", now);

출력

'java' 카테고리의 다른 글

자바의 switch문  (0) 2024.01.21
자바의 if(조건문)  (0) 2024.01.21
재귀 메서드 (Recursive Method)  (0) 2024.01.21
메서드 오버로딩(Method Overloading)  (2) 2024.01.21
자바의 메서드(Method)  (0) 2024.01.21