2014-02-28 73 views
0

如何使用string類的split方法驗證日期(我的意思是日期不應該無效)? 進一步的細節:每個月應該有他們各自的日子,二月應該有29天,只有當它是一個閏年,日期不應該超過目前的日期。如何使用字符串split方法驗證日期?

+0

您是否收到日期爲字符串?如果是的話,寫入日期的格式是什麼? – Nopiforyou

+0

以及到目前爲止嘗試過的東西? – hage

+0

嗯,你知道JDK有類來解析日期了嗎? (在這種情況下爲'SimpleDateFormat') – fge

回答

2

我可以電子書籍使用的validate(字符串值)方法從Apache Commons DateValidator

import org.apache.commons.validator.routines.DateValidator; 
... 

// Get the Date validator 
DateValidator validator = DateValidator.getInstance(); 

// Validate/Convert the date 
Date fooDate = validator.validate(fooString); 
if (fooDate == null) { 
    // error...not a valid date 
    return; 
} 

驗證()返回解析的日期是否有效或無效,如果無效。

如果你只想得到真/假,那麼還有另一種布爾方法isValid()。例如:

DateValidator validator = DateValidator.getInstance(); 
if (validator.isValid(date)) { 
    System.out.println(date + " is valid"); 
} else { 
    System.out.println(date + " is invalid"); 
} 
+0

和兄弟我怎麼把這個到java?我不知道關於Apache。 – user3364497

+0

@ user3364497查看SimpleDateFormat的javadoc;它被集成到Java本身中。更重要的是,一個更好的圖書館來處理時間是喬達時間,如果你想使用外部庫,使用這個而不是Apache的 – fge

+0

哥們我知道這一點,但我沒有包。 – user3364497

1

在JDK,你必須SimpleDateFormat來處理這種東西。

例如,爲了驗證一個小時:

final DateFormat fmt = new SimpleDateFormat("HH:mm"); 

那麼你可以嘗試解析:

fmt.parse(input); 

,則會引發ParseException如果日期是無效的。

當然,可以做許多其他格式。

至於外部庫,如果你必須/想要使用一個,真的只有一個需要考慮:Joda Time。 Java 8的新日期API的靈感來自90 +%,這是一個非常好的庫。注意:JDK和Joda Time的解析器都會在當前時間的日期導出缺失的組件;這意味着如果你在2015年試圖解析包含Feb 29的字符串,它將會失敗......但是它將在2016年成功,因爲它是一個閏年!

+0

不錯的一個最好的方法。 –

+1

SimpleDateFormat將產生錯誤的結果,例如,嘗試使用String date =「32/02/2014」; – Boris

0
convert string to date format, and this is easy for validating 

public class DateUtil { 

    // List of all date formats that we want to parse. 
    // Add your own format here. 
//u can use anyone format 
    private static List<SimpleDateFormat>; 
      dateFormats = new ArrayList<SimpleDateFormat>() {{ 
      add(new SimpleDateFormat("M/dd/yyyy")); 
      add(new SimpleDateFormat("dd.M.yyyy")); 
      add(new SimpleDateFormat("dd.M.yyyy hh:mm:ss a")); 
      add(new SimpleDateFormat("dd.MMM.yyyy")); 
      add(new SimpleDateFormat("dd-MMM-yyyy")); 
     } 
    }; 

    /** 
    * Convert String with various formats into java.util.Date 
    * 
    * @param input 
    *   Date as a string 
    * @return java.util.Date object if input string is parsed 
    *   successfully else returns null 
    */ 
    public static Date convertToDate(String input) { 
     Date date = null; 
     if(null == input) { 
      return null; 
     } 
     for (SimpleDateFormat format : dateFormats) { 
      try { 
       format.setLenient(false); 
       date = format.parse(input); 
      } catch (ParseException e) { 
       //Shhh.. try other formats 
      } 
      if (date != null) { 
       break; 
      } 
     } 

     return date; 
    } 
} 
+0

呃,在你的'try'塊中,你可以'返回format.parse(input);';) – fge

+0

如果它是'Catch'意味着數據無效並且設置返回布爾value.its簡單@fge –

+0

我不是在說關於'catch'在這裏,但關於你的'try'塊。如果你像我說的那樣做,你甚至不需要在'catch'後面檢查'null',並且你甚至不需要'date'變量以 – fge

相關問題