세로형
Link
11-28 18:02
«   2021/11   »
  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        
Archives
Today
850
Total
1,955,020
관리 메뉴

꿈 많은 사람의 이야기

자바 날짜(Calendar)와 유닉스 시간 활용 본문

java

자바 날짜(Calendar)와 유닉스 시간 활용

오키여 이수진의 블로그 2017. 8. 18. 08:41

유닉스 시간은 시각을 나타내는 방식이다. 
1970년 1월 1일 00:00:00 부터의 경과 시간을 초로 환산하여 정수로 나타낸 것이다.

자바에서 이 유닉스 시간을 활용해서 D-day같은 것을 만들 수 있다.

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
 
class Cal
{
    Calendar cal = Calendar.getInstance();
    Calendar cal2 = Calendar.getInstance();
    String[] ss;
    public int doomDay(String s)
    {
        ss = s.split("-");
        int d_day;
        long unix = cal.getTimeInMillis();
        cal2.set(Integer.parseInt(ss[0]), Integer.parseInt(ss[1]), Integer.parseInt(ss[2]));
        //입력 받아온 것으로 날짜셋팅
        
        long unix2 = cal2.getTimeInMillis();
        //입력 받아온 날짜의 유닉스시간 구하고
        
        long min = (unix/1000- (unix2/1000);
        //해당 기준 날짜와 입력 받은 날짜의 유닉스 시간 차를 계산한다.
        d_day = (int)Math.abs(min/(60*60*24));
        //24시*60분*60초 값을 곱해서 int값으로 변환한뒤 D-day를 구한다.
        
        
        return d_day;
    }
    
    public int diffDate(String s, String s2)
    {
        String[] s1 = s.split("-");
        String[] s22 = s2.split("-");
        int day;
        cal.set(Integer.parseInt(s1[0]), Integer.parseInt(s1[1]), Integer.parseInt(s1[2]));
        //첫번째 값으로 들어온 날짜 셋팅
        
        cal2.set(Integer.parseInt(s22[0]), Integer.parseInt(s22[1]), Integer.parseInt(s22[2]));
        //두번째 값으로들어온 날자 셋팅
        long unix = cal.getTimeInMillis();
        //첫번째 값 날짜 유닉스 시간 설정
        long unix2 = cal2.getTimeInMillis();
        //두번째 값 날짜 유닉스 시간 설정
        long min = (unix/1000- (unix2/1000);
        //유닉스 시간 차를 구하고
        day = (int)Math.abs(min/(60*60*24));
        //24시 60분 60초 값을 곱해서 디데이를 구한다.
        return day;
    }
 
}
Colored by Color Scripter

위 클래스는2개의 메소드가 존재한다. 하나는 현재 시간과 사용자가 입력한 1개의 값에 대한 D-day를 구하는 메소드(Doomday)이고
하나는 사용자가 불러온 2개의 값의 디데이를 구하는 메소드(diffDate)이다.

먼저 날짜는 - 구분자로 오기 때문에 - 구분자로 split()해주어 String배열을 만든다. 이후 그 배열 값을 이용해 날짜를 set()메소드로 셋팅해준다.

그리고 현재 시스템에 대한 유닉스 시간
 long unix = cal.getTimeInMillis();
를 구해주고
사용자가 입력한 날짜를 셋팅한 날짜에 대해 유닉스 시간을
 long unix2 = cal2.getTimeInMillis();
구해준다.

이후 유닉스 시간을 1000으로 나눈 값에 대한 차를 구한다.
(사용자 입력과 현재 시간에 대한 )
 long min = (unix/1000- (unix2/1000);
그리고 그 차에 24시*60분*60초를 곱하여 d-day를 구할 수 있다.
d_day = (int)Math.abs(min/(60*60*24));

diffDate()메소드도 마찬가지이다.

그리고 메인에선 다음과 같이 호출하면 된다.

1
2
3
4
5
6
Cal c = new Cal();
int d = c.doomDay("2017-3-26");
System.out.println(d);
        
int d2 = c.diffDate("2015-10-31""2015-11-02");
System.out.println("d2 : "+d2);

또한
compareTo()메소드를 이용해 어느 날짜가 더 큰지를 알 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Calendar cal3 = Calendar.getInstance();
Calendar cal4 = Calendar.getInstance();
cal4.set(20170326);
int result = cal3.compareTo(cal4);
//compare를 이요하면 누가 더 큰지 알 수 있다.
if(result == 1)
{
    System.out.println("오늘이 더 큽니다.");
}
else if(result ==-1 )
{
    System.out.println("cal4 날짜가 더 큽니다.");
}
else
    System.out.println("날짜가 같습니다.");
 
Colored by Color Scripter

위 소스가 그것에 대한 예제이다


반응형
그리드형
0 Comments
댓글쓰기 폼