2014-09-29 29 views
2

我想檢查日期進行驗證。以下是我的代碼。當我檢查日期12/12/2014XYZ時,SimpleDateFormat.parse不會引發異常。與其他無效日期如13/13/2014它是拋出異常。無法檢查使用SimpleParseDate.parse有效日期

public class DateCheck{ 

    public static void main(String[] args) { 
     SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy"); 
     sdf.setLenient(false); 
     try { 
      sdf.parse("12/31/2014XYZ"); 
      System.out.println("Valid Date"); 
     } catch (Exception e) { 
      System.out.println("Invalid Date"); 

     } 
    } 
} 

我GOOGLE了很多,但找不到合適的解決方案。

+0

相關問題:http:// stackoverflow。com/questions/3025942/is-this-a-java-dateformat-bug – aioobe 2014-09-29 09:43:44

回答

3

使用ParsePosition如下:

try { 
    String input = "12/31/2014XYZ"; 

    ParsePosition pp = new ParsePosition(0); 
    sdf.parse(input, pp); 

    // Make sure the entire string was parsed 
    if (pp.getIndex() != input.length()) 
     throw new Exception(); 

    System.out.println("Valid Date"); 
} catch (Exception e) { 
    System.out.println("Invalid Date"); 
} 

類似的問題:

0

這是因爲在Javadoc描述:從給定字符串產生的日期開始

分析文本。 該方法可能不會使用給定字符串的整個文本。

所以你的觀察是預期和描述的行爲。

0

正如你已經告訴日期格式「MM/DD/YYYY 「所以它只會檢查前四個字符呃「/」

如果你寫日期爲「12/31/XYZ2014」,它會拋出一個異常並且打印出無效的日期。

0

來自Java doc

從給定字符串的開頭解析文本以生成日期。 該方法可能不使用給定字符串的整個文本。

所以它只需要12/31/201412/31/2014XYZ並採取有效的格式。

如:

SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy"); 
try { 
    java.util.Date date=sdf.parse("12/31/2014AnyThing"); 
    System.out.println("Valid Date "+date); 
    } catch (ParseException e) { 
    System.out.println("Invalid Date"); 
    } 
try { 
    java.util.Date date=sdf.parse("AnyThing12/31/2014"); 
    System.out.println("Valid Date "+date); 
    } catch (ParseException e) { 
    System.out.println("Invalid Date"); 
    } 

輸出地說:

Valid Date Wed Dec 31 00:00:00 IST 2014 
    Invalid Date 

同在這裏。

SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy"); 
    try { 
     java.util.Date date=sdf.parse("12/31/2014XYZ"); 
     System.out.println("Valid Date "+date); 
    } catch (ParseException e) { 
     System.out.println("Invalid Date"); 

    } 

    try { 
     java.util.Date date=sdf.parse("XYZ12/31/2014"); 
     System.out.println("Valid Date "+date); 
    } catch (ParseException e) { 
     System.out.println("Invalid Date"); 

    } 

輸出地說:

Valid Date Wed Dec 31 00:00:00 IST 2014 
    Invalid Date 

編輯:

@aioobe答案將提供的解決方案並不以此爲有效的日期格式。

+0

但是它不適用於OP提供的示例:「12/31/2014XYZ」 – aioobe 2014-09-29 09:41:41

+0

@aioobe你可以運行它並向我解釋你的觀點。 http://ideone.com/Rtnd6J – 2014-09-29 09:43:32

+0

「12/31/2014XYZ」對我來說看起來不是一個有效的日期。 – aioobe 2014-09-29 09:44:34