2011-02-02 9 views
6

나는 날짜 시간 차이를 계산하려고하지만 난 이상한 결과를 받고 있어요 :자바 날짜 차이 퍼즐

import java.util.Calendar; 
    import java.util.Collections; 
    import java.util.Vector; 

    public class Main { 

     static Calendar dcal = Calendar.getInstance(); 
    static Calendar ccal = Calendar.getInstance(); 
    public static void main(String[] args) { 
     dcal.set(2011, 1, 27); 
     ccal.set(2011,2,1); 
     long dtime = dcal.getTimeInMillis(); 
     long ctime = ccal.getTimeInMillis(); 
     long diff = ctime - dtime; 
     int hours = (int) (diff/(1000 * 60 * 60)); 
     System.out.println("hours->"+hours); 

    } 

} 

내가 설정하면 ccal 1 (31) 2011 년 날짜의 차이는 다음과 같습니다 여기에 근원이다 96 시간이지만 2 1 2011 으로 설정하면 날짜 차이가 48 시간입니다. 어떻게 이럴 수있어? 그 치료법은 무엇입니까?

감사합니다,

엘리엇

답변

6

이 같은 ccal을 설정하는 경우 이렇게 개월 달력 롤 기반의 제로하고 있기 때문에 "ccal.set(2011, 1, 31)"날짜가 실제로 2001년 3월 3일입니다 기본적으로. 따라서 3 월 1 일 (set(2011,2,1))에서 3 월 3 일 (set(2011,1,31)) 사이에 이틀이 있기 때문에 48 시간 (96-48)의 차이는 맞습니다.

+0

기본적으로 캘린더 롤링에 대한 정보를 보내 주셔서 감사합니다. –

4

, 오른쪽 개월 기준으로 0 있다는 것을 알고? 0은 1 월이고 1은 2 월이므로 1 31 2011은 존재하지 않습니다. 사실 숫자를 사용하지 않고 대신 Calendar 상수를 사용하는 것이 좋습니다 (예 : Calendar.JANUARY). 직접 보는 것은 무슨 일이 일어나고 있는지, 캘린더의 각각의 날짜를 출력 :

ccal.set(2011, 1, 31); 
    System.out.println(ccal.getTime()); 
+0

나는 그것을 알지만 그 결과를 설명하지 않는다. – Elliott

+3

나는 그렇게 생각한다. 2011 년 1 월 31 일이 존재하지 않기 때문에 예상치 못한 일이 발생합니다. 다시 말하지만, 필자의 답변에서 언급 한 날짜를 인쇄하십시오. –

+1

예기치 않은 것은 아닙니다. 완벽하게 문서화되었습니다. – dty