●캘린더 클래스
-싱글톤 방식의 클래스입니다
-생성자가 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(2015, 7, 15);
// -> 월만 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(2015, 7, 15);
// -> 월만 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 |
'JAVA > 수업 복습' 카테고리의 다른 글
자바 공부기록 49 - Formatter (0) | 2022.05.11 |
---|---|
자바 공부기록 48 - StringClass (0) | 2022.05.11 |
자바 공부기록 46 - Object 클래스 (0) | 2022.05.06 |
자바 공부기록 45 - 상속(Extends)의 형변환 (0) | 2022.05.04 |
자바 공부기록 44 - 상속(Extends) (0) | 2022.05.03 |