2013-01-07 86 views
4

我正在使用NetBeans IDE 7.2。 我有兩個分開的類newDateTest.javanewDateMethod.java,我目前正在使用我的方法類來驗證用戶輸入中的一個日期,這個用戶輸入在我的測試類中使用過。在java中驗證日期

所以在我的測試類到目前爲止,我有以下幾點:

try 
{ 
    Prompt ="please enter a date in the format dd-mm-yyyy"; 
    System.out.println(Prompt); 
    String inputDate = in.next(); 
    isValid = newDateMethod.validDate(input, input, input); 
    if (isValid){ 
     System.out.println("VALID DATE"); 

    } else { 
     System.out.println("INVALID DATE"); 

    } 

}catch (ArrayIndexOutOfBoundsException oob) { 
    System.out.println(oob); 
} 
} 

但是我不知道如何驗證日期在我的方法類,因爲我是相當新的Java的。

任何人都可以來解決?我已經教會使用的排序是Date Formmater,但不確定這是否合適?如果是的話不知道如何使用它

+1

您的問題已經吸引了很多推薦SimpleDateFormat類的答案。小心這個。舉兩個例子,parse()方法不能檢測錯誤的月份(即第13個月),並且年份的格式可能隨着更長的年份而爆發。你不能*僅僅驗證*這個類的日期。這取決於*你想驗證什麼*。 – 8bitjunkie

回答

12

像這樣:

Date date = null; 
String inputDate = "07-01-2013"; 
try { 
    DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy"); 
    formatter.setLenient(false); 
    date = formatter.parse(inputDate); 
} catch (ParseException e) { 
    e.printStackTrace(); 
} 
+0

這是錯的! 如果不是「07-01-2013」​​,你的輸入將是「07-01-017」或「07-01-2ooo」 你不會得到例外,但格式是錯誤的 – magulla

0

您應該使用SimpleDateFormat.parse(String)方法。如果傳遞的日期格式錯誤,則會引發異常,在這種情況下您將返回false。

public boolean validateDate(String date) { 
    SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy"); 
    try { 
     sdf.parse(date); 
     return true; 
    } 
    catch(ParseException ex) { 
     return false; 
    } 
} 
+0

參考。 '提示=「請輸入日期格式爲dd-mm-yyyy」':-) –

+0

這是錯誤的! 如果不是「07-01-2013」​​您的輸入將是「07-01-017」或「07-01-2ooo」 您不會得到例外,但格式錯誤 – magulla

1

標準JDK類是SimpleDateFormat

DateFormat fmt = new SimpleDateFormat("yourformathere"); 

// use fmt.parse() to check for validity 

另外,我建議你使用Joda TimeDateTimeFormat

+0

如果您使用「dd/MM/yyyy「作爲SimpleDateFormat的模式,例如輸入日期爲」13/13/2013「,則解析方法將返回日期爲13/01/2014的java.util.Date。注意並且不要在Java 8下使用標準的JDK類來進行日期計算。 – 8bitjunkie

1

而不是依靠往往有一個小的性能開銷例外,您還可以使用DateValidator從Apache公地程序包是這樣的:

if (DateValidator.getInstance().validate(inputDate, "dd-MM-yyyy") != null) { 
    // Date is valid 
} 
else { 
    // Date is invalid 
} 

小免責聲明雖然,我沒有看過驗證方法的實現,我不確定它是否使用例如SimpleDateFormat ...

+0

警告:Date testDate = DateValidator.getInstance()。validate(「25/13/2013」​​,「dd/MM/yyyy」)正確標識13不是有效的月份,而是Date testDate = DateValidator.getInstance()。validate (「25/13/2013456」,「dd/MM/yyyy」);儘管掩碼只允許4個字符,但會返回有效日期。 – 8bitjunkie