-
[자바기초] 날짜 클래스 GregorianCalender 정리노트º Language º/Java 2023. 4. 1. 16:15
* 날짜와 관련된 클래스 ( 년, 월, 일, 시, 분, 초 , 요일)
1. Date
2. Calendar
3. GregorianCalenedar
자바에서 날짜와 관련된 클래스는 세 가지로 사용이 가능합니다.
요즘은 Date보다는 Calendar, GregorianCalendar가 사용되고 있습니다.
자, 그럼 자주 사용되는 GregorianCalendar 사용 방법을 알려드리겠습니다. 이것만 알고있어도 됩니다.
여러 가지의 메소드들 중 자주 사용 되는 부분을 짚도록 하겠습니다.
* GregorianCalendar 기초 설명
import java.util.Calendar; import java.util.GregorianCalendar; public class GregorianCalendarTest01 { public static void main(String[] args) { String []str= {"","일","월","화","수","목","금","토"}; GregorianCalendar today = new GregorianCalendar(); int yy = today.get(Calendar.YEAR); //년 int mm = today.get(Calendar.MONTH); //월 int dd = today.get(Calendar.DAY_OF_MONTH); //일 int hh = today.get(Calendar.HOUR_OF_DAY); //시 int MM = today.get(Calendar.MINUTE); //분 int ss = today.get(Calendar.SECOND); //초 int dy = today.get(Calendar.DAY_OF_WEEK); //요일 String day = str[dy]; //요일의 정수값을 String으로 변환 String result = String.format("%d년 %d월 %d일(%s요일) %d시 %d분 %d초", yy,mm,dd,day,hh,MM,ss); System.out.println(result); } }
> 캘린더의 기본 메소드들입니다. 캘린더 메소드들의 연월일시간등 메소드를 사용하는 방법을 하나씩 알아봅시다.
1. 우선 그레고리언캘린더를 참조변수 자료형으로 선언할때 import를 해주고 객체를 생성합니다.
GregorianCalendar today = new GregorianCalendar();
2. 필요한 캘린더 메서드들을 불러옵니다.
int yy = today.get(Calendar.YEAR); int mm = today.get(Calendar.MONTH); int dd = today.get(Calendar.DAY_OF_MONTH); int hh = today.get(Calendar.HOUR_OF_DAY); int MM = today.get(Calendar.MINUTE); int ss = today.get(Calendar.SECOND); int dy = today.get(Calendar.DAY_OF_WEEK);
> 맨 아래 dy(요일)을 보게되면 이 값은 int(정수)형으로 출력되기에 출력시에는 String(문자열)으로 변환해주어야 합니다.
3. 요일은 타입을 변환시켜 출력합니다.
String []str= {"","일","월","화","수","목","금","토"}; String day = str[dy];
> str 배열의 요소값으로 [dy]를 넣어주어 문자열 변수(String day)로 변환합니다.
이때 주의점은 캘린더는 1부터 일요일로 시작하기에 앞의 배열 str[0] 요소는 빈공백으로 두어야 합니다.
[ 1:일요일, 2:월요일, 3:화요일, 4:수요일, 5:목요일, 6:금요일, 7:토요일 ]
4. 마지막으로, ' 년, 월, 일, 시, 분, 초 , 요일' 을 출력해보도록 하겠습니다.
String result = String.format("%d년 %d월 %d일(%s요일) %d시 %d분 %d초", yy,mm+1,dd,day,hh,MM,ss); System.out.println(result);
> 출력문에서 MONTH에는 +1을 항상 해주어야 합니다. 자바에서 이전 달로 나타게끔 설정해두었기 때문입니다.
> String result = String.fomat() 은 System.out.printf()로 사용해도 무방합니다.
2023년 4월 1일(토요일) 14시 49분 15초
> 결과 값을 보면 출력할 때마다 변하는 현재 시간을 확인하실 수 있습니다.
연습)
1. 사용자한테 연, 월, 일을 받아 그 날짜의 요일을 출력하는 프로그램을 작성해봅시다.
public static void main(String[] args) { Scanner sc = new Scanner(System.in); int yy,mm,dd; System.out.println("년을 입력하세요"); yy = sc.nextInt(); System.out.println("월을 입력하세요"); mm = sc.nextInt(); System.out.println("일을 입력하세요"); dd = sc.nextInt(); GregorianCalendar cal = new GregorianCalendar(yy,mm-1,dd); String []arr = {"","일","월","화","수","목","금","토"}; int dy = cal.get(Calendar.DAY_OF_WEEK); String str = arr[dy]; System.out.printf("%d년 %d월 %s일은 %s요일 입니다.",yy,mm,dd,str); }
> 여기서 주의 할 점은 달력을 기준으로 실제 해당 월을 확인하기위해 출력문에 +1을 해야했었지만,
사용자값으로 해당 월을 받아 출력하고자 할때에는 반대로 자바에게 맞춰 -1을 해주어야 제 값이 출력됩니다.
2. 캘린더라는 이름에 걸맞게 캘린더를 만들어보도록 합시다.
package gregorianCalender; import java.util.Calendar; import java.util.GregorianCalendar; public class aa { public static void main(String[] args) { // 그레고리언 객체생성 및 달력의 년, 월 출력 GregorianCalendar today = new GregorianCalendar(); int yy = today.get(Calendar.YEAR); int mm = today.get(Calendar.MONTH); System.out.printf("%d년 %d월\n",yy,mm+1); // 달력의 요일을 일정 간격으로 출력 String []str = {"일","월","화","수","목","금","토"}; for(String s:str) { System.out.printf("%-3s",s); } System.out.println(); // 달력모양을 만들기 위해 해당 년, 월 1일을 기준으로 시작일과 마지막일을 구함 GregorianCalendar startday = new GregorianCalendar(yy,mm,1); int dy = startday.get(Calendar.DAY_OF_WEEK); // getActualMaximum은 해당 달의 마지막 날을 구합니다. int last = startday.getActualMaximum(Calendar.DAY_OF_MONTH); // 달력에서 1일 전 빈공간을 출력해주기 위한 반복문 for(int i=1; i<dy;i++) { System.out.printf("%-3c",' '); } // 달력에 빈 공간을 포함하여 마지막 일자까지 7일을 기준으로 줄을 바꿔숫자를 표현해주기 위한 반복문 for (int i = 1; i <= last; i++) { System.out.printf("%-3d",i); if((i+dy-1) % 7 == 0) { System.out.println(); } } } }
'º Language º > Java' 카테고리의 다른 글
[자바기초] 예외 처리(Exception) 정리노트 (0) 2023.04.06 [자바기초] 생성자를 만드는 이유 정리노트 (0) 2023.04.02 [자바기초] 컬렉션 프레임워크의 종류 (3가지), 제네릭 정리노트 (0) 2023.03.29 [자바기초] String, StringBuffer, String Builder 정리노트 (0) 2023.03.29 [자바기초] 객체지향 프로그래밍 특징(다형성) 정리노트 (0) 2023.03.25