2013-01-02 2 views
4

캘린더를 Android에서 사용하려고하는데 밀리 초로 날짜를 변환하려고하면 다른 실행 결과가 달라집니다.날짜를 밀리 초로 변환하면 Android (java)에서 일치하지 않는 결과가 발생합니다.

밀리 초 1과 밀리 초 2의 값을 인쇄 할 때 다른 결과가 여러 번 나타납니다!

Calendar calendar1 = Calendar.getInstance(); 
Calendar calendar2 = new GregorianCalendar(TimeZone.getTimeZone("GMT")); 

calendar1.set(1997, 9, 3); 
calendar2.set(1997, 9, 01); 

long milliseconds1 = calendar1.getTimeInMillis(); 
long milliseconds2 = calendar2.getTimeInMillis(); 

이 같은 자바 (또는 안드로이드의 구현)의 버그 또는 무언가가 다음과 같이

내 코드는?

+0

당신이 그것에 대해 매우 조심 아니었다 대한 –

+0

을 언급하는 다른 출력을 제공하시기 바랍니다 수 있습니다. 나는 일을 할 수 있는지 알기 위해 노력한 것뿐입니다. 그래도 고마워. – Shdus

+0

예. 나는 그것을 한 번 실행하고 875693736417을 얻습니다. 두 번째로 나는 875693771063을 얻습니다. 세 번째로 나는 875694175657을 얻습니다. 기타 – Shdus

답변

8

질문에 대한 답변 : 아니요, 이것은 Java 또는 Android의 버그가 아닙니다. 그것은 잘 문서화 된 행동입니다. Calendar 인스턴스에 YEAR, MONTH 및 DATE보다 많은 필드가 있습니다. 새 캘린더 인스턴스를 생성하고 해당 필드 만 변경하고 다른 모든 필드는 생성 된대로 남겨 둡니다. 프로그램을 두 번 연속 실행하면 평균 시간은 초와 밀리 초가 변경됩니다. JavaDoc에서

: 달력은 년, 월, DAY_OF_MONTH 필드에 대한

는 값을 설정합니다. 다른 캘린더 필드의 이전 값이 유지됩니다. 이 아닌 경우 먼저 clear()으로 전화하십시오. 매번 같은 값을 출력하기 위해

, 당신은이 작업을 수행 할 필요가 :

Calendar calendar1 = Calendar.getInstance(); 
    Calendar calendar2 = new GregorianCalendar(TimeZone.getTimeZone("GMT")); 

    calendar1.clear(); 
    calendar1.set(1997, 9, 3); 
    calendar2.clear(); 
    calendar2.set(1997, 9, 1); 

    long milliseconds1 = calendar1.getTimeInMillis(); 
    long milliseconds2 = calendar2.getTimeInMillis(); 
+0

허. 감사! 나는 그것을 완전히 놓쳤다. – Shdus

+1

@Shdus 당신이 예상하지 못한 동작을 보게된다면 javadoc을 항상주의 깊게 읽으십시오. –

+0

@Shdus - 그리고 그것을하기 전에 * SO * 질문을 게시하십시오 :-) –

관련 문제