JAVA/수업 복습

자바 공부기록 47 - CalendarClass

본이qq 2022. 5. 6. 15:16

●캘린더 클래스

  -싱글톤 방식의 클래스입니다

  -생성자가 private으로 접근 차단됨(외부에서 접근 금지 .-> 외부에서 new Calendar() 사용 안됨)

  -유일하게 실행된 new Calendar() 는 클래스 내부에서 실행되어

    클래스 내부에 단 하나만 존재하게끔 생성된 레퍼런스 변수에 주소를 저장합니다

  -그리고 그 레퍼런스 변수가 갖고 있는 주소를 리턴하는 public static 형태의

    getInstance 메서드로 인스턴스의 주소를 리턴받아 씁니다

  -이후 다시 getInstance() 메서드가 실행돼도 현재 HEAP에 이미 있는

    인스턴스의 주소가 리턴됩니다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
public class CalendarClass01 {
 
    public static void main(String[] args) {
        Calendar today = Calendar.getInstance();
 
        System.out.println("년도 : " + today.get(Calendar.YEAR));
        System.out.println("년도 : " + today.get( 1 ) );
        
        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 초
        
 
    }
 
}
 
cs

 

 

객체명.set(년도, 월, 일);

 - set : 원하는 특정 날짜로 객체내 날짜 구성을 재설정

 - set 메서드에 필드명과 값을 넣어주면 해당 필드값만 변경됩니다

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class CalendarClass01 {
 
    public static void main(String[] args) {
        Calendar date1 = Calendar.getInstance();        
        Calendar date2 = Calendar.getInstance();        
 
        //date 1 달력객체의 오늘 날짜를 2015년 8월 15일로 설정
        date1.set(2015715);
 
 
        // -> 월만 7월로 바뀜
        date2.set(Calendar.MONTH, 6); 
    }
 
}
 
cs

 

 

 

 

 

-> 위 date1과 date2에 설정된 날짜를 "0000년 0월 0일 0요일" 형식으로 출력해주세요

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class CalendarClass01 {
 
    public static void main(String[] args) {
        Calendar date1 = Calendar.getInstance();        
        Calendar date2 = Calendar.getInstance();        
 
        //date 1 달력객체의 오늘 날짜를 2015년 8월 15일로 설정
        date1.set(2015715);
 
 
        // -> 월만 7월로 바뀜
        date2.set(Calendar.MONTH, 6); 
 
        prnDate(date1);
        prnDate(date2);
 
    }
 
    public 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)] + "요일");
        
        
    }
 
}
 
cs

 

 

 

 

 

●.getTimeInMillis() : 날짜 시간 모두를 밀리초로 환산하는 매서드

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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);
 
        System.out.println(time1.getTimeInMillis());
        System.out.println(time2.getTimeInMillis());
 
        long dif = ((time2.getTimeInMillis() - time1.getTimeInMillis())/1000);
        //1000으로 나누는 건 밀리초단위를 초단위로 환산하기 위함입니다.
        
        System.out.println("time1과 time2의 차이는 "+ dif + "초 입니다");
 
    }
}
cs

 

 

 

날짜 수정하기 

절대적 날짜 수정하기 - set 메서드

 

 

1
2
3
4
5
6
7
8
9
public class CalendarClass03 {
 
    public static void main(String[] args) {
 
        Calendar date = Calendar.getInstance();
        date.set(2021,10,30);
 
    }
}
cs

 

 

상대적 날짜 수정하기 (예 - 1일 후 , 6개월 후 , 2년 후 ...)

 -add 메서드 ->

  add메서드의 증감은 하나의 요소를 반영하지만, 그로 인해 다른 필드에 영향을 줄 수 있습니다.

  일을 변경하여 달이 바뀌거나, 월을 변경하여 년도가 바뀌는 변경 등

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class CalendarClass03 {
 
    public static void main(String[] args) {
 
        Calendar date = Calendar.getInstance();
        date.set(2021,10,30);
 
        System.out.println("== 1일 후 ==");
        date.add( Calendar.DATE, 1);
 
        System.out.println("==6달 후==");
        date.add(Calendar.MONTH,6);
 
        System.out.println("==7달 전==");
        date.add(Calendar.MONTH,-7);
 
    }
}
cs

 

 

 

-roll 메서드 ->

다른 필드에 영향을 주지 않고 해당 필드만으로 더하고 빼는 메서드

11월 1일에서 29일 더하면 11월 30일이 되고 이후 11일이 더해져

다시 11일이 나옴 월에는 영향을 주지 않음 결과  -> 11월 11일

 

 

1
2
3
4
5
6
7
8
9
10
public class CalendarClass03 {
 
    public static void main(String[] args) {
 
        Calendar date = Calendar.getInstance();
        date.set(2021,10,1);
        
        date.roll(Calendar.DATE,40);
    }
}
cs