2014-01-19 4 views
1

예상 반환하지 않습니다 후 나는이 나에게 거짓을주고있다 아래의 코드자바 캘린더. 기능이 결과

Calendar now = Calendar.getInstance(); 
Calendar expiry = Calendar.getInstance(); 
expiry.set(2014, 1, 15, 0, 0); 
now.after(expiry); 

을 작성했습니다, 오늘 그것이 사실

내가 실종 아무것도주지해야 19입니까?

+0

캘린더 클래스에서 제공된 상수를 사용하는 것이 더 좋습니다. @ peter.petrov는 1이 실제로 FEBRUARY를 의미한다고 지적했습니다. 이 경우에는'expiry.set (2014, Calendar.JANUARY, 15, 0, 0)'입니다. [여기를 참조하십시오.] (http://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html) – kmera

답변

2

(1) 1 월은 1 월이 아니라 2 월입니다. 월 0은 1 월입니다.

(2) 또한 안전한 측에 있기 위해 after()를 호출하기 전에 getTime()을 호출 할 것입니다.

Calendar now = Calendar.getInstance(); 
Calendar expiry = Calendar.getInstance(); 
expiry.set(2014, 0, 15, 0, 0); 
expiry.getTime(); 
now.after(expiry); 

여기서 getTime()을 호출해야하는지 확실하지 않습니다.

저는 JavaDoc의이 부분을 언급하고 있습니다.

(f, 값)은 달력 필드 f를 값으로 변경합니다. 또한
내부 구성원 변수를 설정하여 달력 필드 f가 변경되었음을 나타냅니다.
달력 필드 f가 즉시 변경 되더라도 다음 get(), getTime(),
getTimeInMillis(), add() 또는 roll() 호출이 수행 될 때까지 달력의 시간 값
은 밀리 초 단위로 다시 계산되지 않습니다. 따라서 set()에 대한 복수 호출
은 불필요한 계산을 여러 번 트리거하지 않습니다.
set()을 사용하여 달력 필드를 변경하면 달력 필드, 달력 필드 값 및 달력 시스템에서
에 따라 다른 달력 필드도 변경 될 수 있습니다.
또한 get (f)는 달력 필드를 다시 계산 한 후
set 메소드를 호출하여 설정된 값을 반환하지 않습니다.
세부 사항은 구체적인 달력 클래스에 의해 결정됩니다.

+0

감사합니다. +1. –

+0

getTime()이 필요하지 않아야합니다. 쉽게 테스트 할 수 있습니다. –

+0

@TimB OK ... 글쎄, 나는 알고있다. 그러나 나는 단지 특정 테스트에 의해 그것을 확인하고 싶지 않다. 나는 OP가 사용하고있는 set 메소드가 (f, value)를 가지는 동일한 특성을 가지고 있는지 확실하지 않다는 것을 의미한다. 그렇다면 getTime()이 필요합니다. 나는 나 자신을 확신하지 못한다. –