자바/자바 기본

java Calendar , date

은은하게미친자 2022. 7. 25. 22:38
728x90

* Calendar , date 의기존의 단점들을 개선한 새로운 클래스  ==>  JAVA.TIME패키지

 

* Calendar

: 추상클래스, 메서드를 통해서 완전히 구현된 클래스의 인스턴스를 얻어 사용.

 

Calendar를 상속받아 완전히 구현한 클래스로는 GregorainCalender 와 BuddhistCalendar가 있는데 getInstance()는 

시스템의 구각와 지역설정을 확인해서 태국인경우 BuddhistCalendar의 인스턴스를 반환하고 그외에 지역에는 BuddhistCalendar 인스턴스를 반환한다.

 

*요일은1부터시작, 월은 0부터시작 예제참고

*원하는 날짜로 설정은 set함수 사용 예제참고

 

Calendar cal = Calendar.getInstance();

 

* Date와 Calendar간의 변환

//Calendar 를 Date로 변환
Calendar cal = Calendar.getInstance();
Date d = new Date(cal.getTimeInMillis());

//Date를 Calendar로 변환
Date d1 = new Date();
Calendar cal1 = Calendar.getInstance();
cal1.setTime(d1);

 * roll함수 add함수차이 :

: add함수 다른필드에 영향을 미침, roll함수 다른 필드에 영향을 미치지 않음, 예제참고

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
package Capter10;
 
import java.util.Calendar;
import java.util.Date;
 
public class Ex10_1 {
 
    public static void main(String[] args) {
        //Calendar 를 Date로 변환
        Calendar cal = Calendar.getInstance();
        Date d = new Date(cal.getTimeInMillis());
 
        //Date를 Calendar로 변환
        Date d1 = new Date();
        Calendar cal1 = Calendar.getInstance();
        cal1.setTime(d1);
        
        System.out.println("연 : " + cal1.get(Calendar.YEAR));
        System.out.println("월(0~11): " + cal1.get(Calendar.MONTH));
        System.out.println("일 : " + cal1.get(Calendar.DAY_OF_MONTH));
        System.out.println("이해의 몇째주 : " + cal1.get(Calendar.WEEK_OF_YEAR));
        System.out.println("이 달의 몇째쭈 : " + cal1.get(Calendar.WEEK_OF_MONTH));
        System.out.println("이 달의 마지막날 : " + cal1.getActualMaximum(Calendar.DATE));
 
        System.out.println("오전/오후 : " + cal1.get(Calendar.AM_PM));
        System.out.println("시 : " + cal1.get(Calendar.HOUR));
        System.out.println("분 : " + cal1.get(Calendar.MINUTE));
        System.out.println("초 : " + cal1.get(Calendar.SECOND));
        
 
    }
 
}
 
cs

 

실행결과
연 : 2022
월(0~11): 6
일 : 25
이해의 몇째주 : 31
이 달의 몇째쭈 : 5
이 달의 마지막날 : 31
오전/오후 : 1
시 : 10
분 : 3
초 : 32

 

 

*날짜간 차이구하기

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
44
45
46
47
48
49
50
51
52
53
package Capter10;
 
import java.util.Calendar;
 
public class Ex10_2 {
 
    public static void main(String[] args) {
        //요일은 1부터시작
        String[] dname = {"""일""월""화""수""목""금","토"};        
        Calendar cal1 = Calendar.getInstance();
        Calendar cal2 = Calendar.getInstance();
        
        //월은 0부터 시작
        cal1.set(20226 ,1);         //22년7월1일로설정
        cal1.set(20226 ,1,0,0,0);   //22년7월1일로설정 시간까지 설정
        cal2.set(20226 ,24);        //22년7월24일로설정
        cal2.set(20226 ,24,1,1,41);  //22년7월24일로설정 시간까지설정
        
        System.out.printf("날짜1 : %d/%d/%d %s %n" ,cal1.get(Calendar.YEAR)
                                                  ,cal1.get(Calendar.MONTH)+1
                                                  ,cal1.get(Calendar.DAY_OF_MONTH)
                                                  ,dname[cal1.get(Calendar.DAY_OF_WEEK)]);
        System.out.printf("날짜2 : %d/%d/%d %s %n" ,cal2.get(Calendar.YEAR)
                                                  ,cal2.get(Calendar.MONTH)+1
                                                  ,cal2.get(Calendar.DAY_OF_MONTH)
                                                  ,dname[cal2.get(Calendar.DAY_OF_WEEK)]);
        
        
        //두날짜 차이 
        //getTimeInMillis : milliseconds.단위
        long differ =(cal2.getTimeInMillis()- cal1.getTimeInMillis())/1000;
        //초단위로 변환
        System.out.println("두날짜차이 :" + differ +"초");
        //일 단위로 변환
        System.out.println(differ/(24*60*60+ " 일");
        
        cal1.add(Calendar.MONTH, 1);
        System.out.printf("날짜1 한달후 : : %d/%d/%d %s %n" ,cal1.get(Calendar.YEAR)
                ,cal1.get(Calendar.MONTH)+1
                ,cal1.get(Calendar.DAY_OF_MONTH)
                ,dname[cal1.get(Calendar.DAY_OF_WEEK)]);
        
        cal2.roll(Calendar.DATE, 8);
        System.out.printf("roll 8일 더하기 : : %d/%d/%d %s %n" ,cal2.get(Calendar.YEAR)
                ,cal2.get(Calendar.MONTH)+1
                ,cal2.get(Calendar.DAY_OF_MONTH)
                ,dname[cal2.get(Calendar.DAY_OF_WEEK)]);
        
        
    }
 
}
 
cs

 

 

 

실행결과
날짜1 : 2022/7/1 금 
날짜2 : 2022/7/24 일 
두날짜차이 :1990901초
23 일
날짜1 한달후 : : 2022/8/1 월 
roll 8일 더하기 : : 2022/7/1 금 

 

728x90