2013-08-04 3 views
0

Пользователь вводит дату своего рождения в поле jText в yyyy/mm/dd, и я хочу убедиться, что он правильно вводит его, а также что это настоящая дата , это мой код до сих пор:Как проверить, действительно ли введена дата рождения?

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.sql.Date в java.util.Date

+0

Возможно, вы смешиваете импорт между датой даты и даты использования. – mael

+0

* Где * это ошибка? Ваш код не содержит следов, и я ожидаю, что ошибка будет наоборот (поскольку java.sql.Date является подклассом java.util.Date.) –

+1

Вероятно, ошибка импорта: 'java.util.Date testDate = null; ' – acdcjunior

ответ

6

mm является минут. MM это месяцы:

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

Смотрите documentation для более подробной информации.

Вы должны установить, что быть строгим (df.setLenient(false), и тогда вам не нужно пытаться форматировать результат еще раз. - просто исключение синтаксического анализа должно быть достаточно

Лично я хотел бы использовать Joda Time для любой даты/время работы в Java, хотя - это гораздо приятнее API

что касается java.util.Date против java.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!!"); 
} 

(Или вы могли бы показывать диалог в блоке поймать, но вы можете 't легко иметь предложение else для случая успеха ...)

+0

уже пробовал, что не изменилось – mike157

+0

@ mike157: Ах, теперь вы действительно дали нам * ошибку *, я отредактирую свой ответ. До этого момента вы бы * только * показали нам код, поэтому я смог только исправить то, что было сломано. –

Смежные вопросы