-
[JAVA] Calendar Class언어/JAVA 2022. 9. 8. 10:09
싱글톤 방식의 클래스
-생성자가 private 으로 접근 차단됨(외부에서 접근 금지.-> 외부에서 new Calendar() 사용 안됨)
-유일하게 실행된 new Calendar() 는 클래스 내부에서 실행되어 클래스내부에 단하나만 존재하게끔 생성된 레퍼런스 변수에 주소를 저장. 그리고 그 레퍼런스 변수가 갖고 있는 주소를 리턴하는 public static 형태의 getInstance 메서드로 인스턴스의 주소를 리턴 받아 씀.
-이후 다시 getInstance() 메서드가 실행되도 현재 HEAP 에 이미 있는 인스턴스의 주소가 리턴 됨.import java.util.Calendar; public class CalendarClass01 { public static void main(String[] args) { Calendar today = Calendar.getInstance(); Calendar tomorrow = Calendar.getInstance(); // 캘린더 클래스에는 스태틱 파이널(static fianl)변수들이 다수 있음 System.out.println( Calendar.YEAR ); //1 출력 //get 메서드는 스태틱 파이널 변수에 해당하는 날짜요소를 얻어주는 메서드 System.out.println("년도 : " + today.get( Calendar.YEAR )); System.out.println("년도 : " + today.get( 1 )); System.out.println( Calendar.MONTH ); int i = today.get(Calendar.MONTH); System.out.println("월 : (0~11) : "+ i + "월"); //MONTH 로 얻어낸 월의 값은 1월이 0 2월이 1 ... 12월이 11로 얻어짐 System.out.println("월 : (1~12) : "+ (i+1) + "월"); // 1. 일요일, 2. 월요일, 3. 화요일...... i = today.get(Calendar.DAY_OF_WEEK); System.out.println("요일(1~7, 1:일요일): " + i); i = today.get(Calendar.DAY_OF_WEEK_IN_MONTH); System.out.println("이 달의 몇 째 요일: " + i ); System.out.println("이 달의 마지막 날: " + today.getActualMaximum(Calendar.DATE) ); i = today.get(Calendar.DATE); System.out.println("이 달의 몇 일: " + i); i = today.get(Calendar.WEEK_OF_YEAR); System.out.println("금년의 몇째주 : " + i ); i = today.get(Calendar.WEEK_OF_MONTH); System.out.println("이 달의 몇 째 주: " + i); i = today.get(Calendar.DAY_OF_YEAR); System.out.println("이 해의 몇 일: " + i); System.out.println("오전_오후(0:오전, 1:오후): " + today.get(Calendar.AM_PM)); 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)); // 프로그램이 시작되어 Calendar 인스턴스가 만들어진 시점 // 시:분:초:1/1000 초 } }
set : 원하는 특정 날짜로 객체내 날짜구성을 재설정, date2 는 아직 오늘 날짜
import java.util.Calendar; public class CalendarClass02 { static String [] weekday = {"", "일", "월", "화" , "수", "목", "금", "토"}; public static void main(String[] args) { Calendar date1 = Calendar.getInstance(); Calendar date2 = Calendar.getInstance(); // date1 달력객체의 오늘 날짜를 2015년 8월 15일로 설정 date1.set(2015, 7, 15); // set 메서드에 스태틱 파이널 필드명과 값을 넣어주면 해당 필드값만 변경 date1.set(Calendar.MONTH, 6); // -> 월만 7월로 바뀜 // 위 date1과 date2 에 설정된 날짜를 "0000년 0월 0일 0요일" 형식으로 출력 // System.out.println() 안에 한번에 구성해서 출력 prnDate(date1); prnDate(date2); //System.out.println( date1.get(Calendar.YEAR) + "년 " // + ( date1.get(Calendar.MONTH) + 1 ) + "월 " // + date1.get(Calendar.DATE) + "일 " // + weekday[ date1.get(Calendar.DAY_OF_WEEK) ] + "요일"); //System.out.println( date2.get(Calendar.YEAR) + "년 " // + ( date2.get(Calendar.MONTH) + 1 ) + "월 " // + date2.get(Calendar.DATE) + "일 " // + weekday[ date2.get(Calendar.DAY_OF_WEEK) ] + "요일"); } private static void prnDate(Calendar c) { System.out.println( c.get(Calendar.YEAR) + "년 " + ( c.get(Calendar.MONTH) + 1 ) + "월 " + c.get(Calendar.DATE) + "일 " + weekday[ c.get(Calendar.DAY_OF_WEEK) ] + "요일"); } }
.getTimeInMillis() : 날짜 시간 모두를 밀리초로 환산하는 매서드
import java.util.Calendar; public class CalendarClass03 { public static void main(String[] args) { Calendar time1 = Calendar.getInstance(); Calendar time2 = Calendar.getInstance(); time1.set(Calendar.HOUR_OF_DAY, 10); time1.set(Calendar.MINUTE, 20); time1.set(Calendar.SECOND, 30); time2.set(Calendar.HOUR_OF_DAY, 20); time2.set(Calendar.MINUTE, 30); time2.set(Calendar.SECOND, 10); printTime(time1); printTime(time2); System.out.println(time1.getTimeInMillis()); System.out.println(time2.getTimeInMillis()); long dif = (time2.getTimeInMillis() - time1.getTimeInMillis()) / 1000; // 1000 으로 나누는 건 밀리초단위를 초단위로 환산하기 위함 System.out.println("time1과 time2의 차이는 "+ dif +"초 입니다."); } public static void printTime(Calendar c) { System.out.println("time : " + c.get(Calendar.HOUR_OF_DAY)+"시 " + c.get(Calendar.MINUTE) +"분 " + c.get(Calendar.SECOND) + "초 " + c.get(Calendar.MILLISECOND)+"(1/1000 초)"); } }
기타메서드
import java.util.Calendar; public class CalendarClass04 { public static void main(String[] args) { Calendar date = Calendar.getInstance(); date.set(2021, 10, 30); // 전체날짜 또는 일부를 수정하는 메서드 - set System.out.println( toDate(date) ); System.out.println("== 1일 후 =="); // 상대적 날자 수정 date.add( Calendar.DATE , 1); System.out.println( toDate(date) ); // add 메서드의 증감은 하나의 요소를 변경하지만, 그로인해 다른 필드에 영향을 줄 수 있음. // 일을 변경하여 달이 바뀌거나, 월을 변경하여 년도가 바뀌는 변경 등 System.out.println("== 6달 후 =="); date.add(Calendar.MONTH, 6); System.out.println( toDate(date) ); System.out.println("== 7달 전 =="); date.add(Calendar.MONTH, -7); System.out.println( toDate(date) ); System.out.println("= 40일 후(roll) ="); date.roll( Calendar.DATE , 40 ); // 다른 필드에 영향을 주지 않고 해당 필드만으로 더하고 빼는 메서드 // 11월 1일에서 29일 더하면 11월 30일이 되고, 이후 11일이 더해져 // 다시 11일이 나옴 월에는 영향을 주지 않음 결과 11월 11일 System.out.println( toDate(date) ); } public static String toDate(Calendar c) { String cDate = c.get(Calendar.YEAR)+"년 " + (c.get(Calendar.MONTH)+1) +"월 " + c.get(Calendar.DATE) + "일 "; return cDate; } }
년도와 월을 입력받고 해당되는 월의 달력 출력(반복실행)
import java.util.Calendar; import java.util.Scanner; public class CalendarClass05 { public static void main(String[] args) { int year, month; int input=0; Scanner sc = new Scanner(System.in); System.out.printf("년도 입력 : "); year=Integer.parseInt( sc.nextLine() ); System.out.printf("월 입력 : "); month=Integer.parseInt( sc.nextLine() ); Calendar sDay = Calendar.getInstance(); Calendar eDay = Calendar.getInstance(); while(true) { sDay.set( year, month-1, 1); // 입력한 달의 1일자로 날짜 설정 //eDay.set( year, month-1, sDay.getActualMaximum(Calendar.DATE))); eDay.set( year, month, 1); // 입력한 년월의 다음달 1일로 설정 eDay.add( Calendar.DATE, -1); // 다시 그날의 1일전으로 설정 -> 입력한 년월의 마지막날 int START_WEEK = sDay.get(Calendar.DAY_OF_WEEK); // 1일의 요일을 숫자로 얻습니다. 일요일 1, 월요일 2, 화요일 3,..... // System.out.println( START_WEEK ); System.out.println("\n" + year + "년 " + month + "월 "); System.out.println("---------------------------------------------------"); System.out.println("일\t월\t화\t수\t목\t금\t토"); System.out.println("---------------------------------------------------"); // 1일자까지 빈칸 for( int i=1; i<START_WEEK; i++) System.out.printf("\t"); // 1일부터 마지막 날짜까지 출력 for( int i=1; i<= eDay.get(Calendar.DATE) ; i++) { System.out.printf("%2d\t", i); if(START_WEEK++ % 7 == 0) System.out.println(); // 7칸마다 줄바꿈 } System.out.println("\n---------------------------------------------------"); System.out.print("\n[이전달(1)] | [다음달(2)] | [종료(3)]"); input = Integer.parseInt( sc.nextLine() ); if(input==3)break; if( input ==1) { if(month==1) { year--; month=12; }else { month--; } }else { if(month==12) { year++; month=1; }else { month++; } } } System.out.println("프로그램 종료"); } }
'언어 > JAVA' 카테고리의 다른 글
[JAVA] Collection (0) 2022.09.08 [JAVA] String Class (0) 2022.09.08 [JAVA] Object 클래스 (1) 2022.09.08 [JAVA] Extends TypeCastion (0) 2022.09.08 [JAVA] 상속(Extends) (0) 2022.09.07