2013-07-02 2 views
7

캘린더 방법을 사용하여 연도 날짜와 월을 설정하고 싶지만 날짜가 유효하지 않은 경우 일종의 표시가 필요합니다.캘린더를 사용하여 날짜가 유효한지 확인합니다.

calendar.set(2013,Calendar.JANUARY , 23) //is a valid date 
calendar.set(2013,Calendar.JANUARY , 33) //is not 

나는 calendar.setLenient(false)을 설정하고 월 33에 값을 설정하면 예외를 던질 것으로 예상,하지만하지 않았다.

답변

8

는 검사가 느리게 수행 보인다

비 엄밀 GregorianCalendar를 어느 범위 외의 필드 값이 설정되어있는 경우의 시간 또는 일정 필드 값을 산출 따라 예외를 던진다.

Calendar c = new GregorianCalendar(); 
c.setLenient(false); 
c.set(2013, Calendar.JANUARY, 33); 
c.getTime(); 

아니라 getTime없이 :

그래서 이것은 당신에게 예외가 발생합니다.

+0

+1 정확하게 맞습니다. Calendar가 JDK에서 가장 손상된 여러 가지 이유 중 하나입니다. (JodaTime을 사용하십시오!) – Bohemian

3

Leniency는 달력이 범위를 벗어나는 날짜를 허용하는지 여부 만 제어합니다. 관용이 설정된 경우 Java는 범위를 벗어난 날짜를 조정하기 위해 일부 계산을 수행합니다 (예 : 2013-12-32는 2014-01-01이됩니다). 관용이 설정되지 않은 경우 Java는이를 허용하지 않지만 실제로 일부 필드를 요청할 때까지 범위를 벗어나는 데이터는 검사하지 않습니다. Javadocs에서 :

비 엄밀 GregorianCalendar를 어느 범위 외의 필드 값이 설정되어있는 경우의 시간 또는 일정 필드 값을 산출 따라 예외를 던진다. 나는이 처리 어떻게

: 다음 질문에

?

calendar.set(2013, Calendar.JANUARY, 1); 

을 다음

int days = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); 

를 호출하고 하루 값과 비교 :

당신은 매월 첫 번째로 일정을 설정할 수 있습니다. 당신의 하루 가치가 범위 안에 있다면, 당신은 계속할 수 있습니다.

관련 문제