2013-08-04 2 views
0

사용자가 생년월일을 yyyy/mm/dd의 jTextfield에 입력하고 정확하게 입력했는지, 그리고 실제 날짜인지 확인하고 싶습니다 .입력 한 생년월일이 올바른지 확인하는 방법

SimpleDateFormat df = new SimpleDateFormat("yyyy/mm/dd"); 
Date testDate = null; 

Birth = jTextField3.getText(); 

try{ 
    testDate = df.parse(Birth); 
} catch (ParseException e){ }  
if (!df.format(testDate).equals(Birth)){ 
    JOptionPane.showMessageDialog(rootPane, "invalid date!!"); 
} 

나는 점점 오전 오류가 나는 java.util.Date

+0

SQL 날짜와 유틸리티 날짜 사이에 가져 오기가 혼합되어있을 수 있습니다. – mael

+0

* 어디에서 * 오류가 있습니까? 귀하의 코드에 캐스팅이 포함되어 있지 않습니다. 그리고 다른 방법으로 오류가 발생할 것으로 예상됩니다 (java.sql.Date는 java.util.Date의 하위 클래스이므로) –

+1

아마도 가져 오기 오류입니다. java.util.Date testDate = null; ' – acdcjunior

답변

6

mm로 분 java.sql.Date입니다 던져 질수 있다고이 지금까지 내 코드입니다. MM 달입니다 :

SimpleDateFormat df = new SimpleDateFormat("yyyy/MM/dd"); 

은 자세한 내용은 documentation를 참조하십시오.

당신은 (즉, 엄격한으로 df.setLenient(false)을 설정해야하고 다시 결과를 포맷하려고 할 필요가 없습니다 -. 단지 구문 분석 예외가 충분해야한다

개인적으로 내가 어떤 날짜 Joda Time을 사용하십시오 자바/시간 일하지만 - 그것은 훨씬 더 좋은 API의 java.util.Datejava.sql.Date 대에 관해서는

-.. 당신이 우리가 완전히 java.util.Date을 사용 준 코드는 이미 보존 할 java.sql.Date에 대한 수입을 가지고 있다면 다음과 같은 것을 원할 것입니다 :

java.util.Date testDate = ...; 

다시 포맷 할 필요가 없습니다, 당신은 심지어 모든 변수를 필요하지 않을 수 있지만 :

SimpleDateFormat df = new SimpleDateFormat("yyyy/MM/dd"); 
df.setLenient(false); 
Date testDate = null; 
boolean valid = false; 
try { 
    df.parse(jTextField3.getText()); 
    valid = true; 
} 
catch (ParseException e) { } // valid will still be false 
if (!valid) {   
    JOptionPane.showMessageDialog(rootPane, "invalid date!!"); 
} 

(또는 당신은 catch 블록에서 메시지 대화 상자를 보여줄 수 있지만, 당신은 할 수 성공 사례에 대해 else 절을 쉽게 가질 수 있습니다.)

+0

이미 차이를 만들지 않았습니다. – mike157

+0

@ mike157 : 아, 이제 실제로 우리에게 * 오류 *를주었습니다. 내 대답을 편집 할 것입니다. 그 시점까지, 우리는 단지 * 우리에게 코드를 보여주었습니다 - 그래서 나는 단지 깨진 것을 고칠 수있었습니다. –

관련 문제