2015-07-11 82 views
-2

美國格式的用戶輸入如下日期:如何檢查日期是在java中

20/05/2015

現在我們知道,在美國格式化這個日期無效。 我如何檢查在java中? 在我的代碼中,我從Excel工作表中獲取日期值,目前我正在處理它。從excel表讀取的日期是數字。例如-3124.0,即no。自1990年1月1日以來經過的日子。我將它轉換爲MM/dd/yyy格式:

SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/YYYY"); 
String s = sdf.format(cell.getDateCellValue()); 

SimpleDateFormat的格式化方法需要將date作爲參數。因此cell.getDateCellValue()給出了傳遞給format方法的日期類型值,該方法將其轉換爲字符串值。

SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/YYYY"); 
String s = sdf.format(cell.getDateCellValue()); 
System.out.println(s); 
sdf.setLenient(false); 
Date d= sdf.parse(s); 
System.out.println(sdf.format(d)); 

所以現在如果Excel單元格的值是2015年12月8日

System.out.println(s); // prints 12/08/2015 

System.out.println(sdf.format(d)); //Prints 12/28/2015 

不明白。

+0

日期存儲在Excel中的日期是字符串還是日期?如果這是一個日期,那麼excel可能會自動將單元格上的格式化規則切換爲全局而不是美國格式? – Gagravarr

+2

如果用戶輸入日期,例如「1/1/1」,它可以是六種格式中的任何一種。軟件應該如何檢查用戶頭腦中的內容?要使軟件可靠地確定日期格式,您需要限制用戶輸入。 –

+0

由於以下代碼,來自excel的日期值以date的形式出現:'cell.getDateCellValue());' – coder

回答

1

如果您的日期是作爲一個字符串你可以試試這個正則表達式:

String date ="20/11/2015"; 

    private static final String DATE_PATTERN = 
     "(0?[1-9]|1[012])/(0?[1-9]|[12][0-9]|3[01])/((19|20)\\d\\d)"; 

    pattern = Pattern.compile(DATE_PATTERN); 
    matcher = pattern.matcher(date); 
    if(matcher.matches()){ 
     System.out.println("mateched"); 
    }else { 
     System.out.println("not matched"); 
    } 

如果你要做一次這樣多,使pattern靜態和編譯一次(在構造函數或靜態塊大概)。

0

做完簡單的日期格式後,使用下面的代碼片段驗證它。 如果您還需要其他日期格式,請使用正則表達式。

SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/YYYY"); 
    s = sdf.format(cell.getDateCellValue()); 

    Pattern datePattern = Pattern 
      .compile("^(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)\\d\\d$"); 
    Matcher matcher = datePattern.matcher(s); 

    LOG.info("Valid Date:" + matcher.find()); 
+0

那很好。但如果我需要打印無效日期。例如。 System.out.println(「Invalid Date:」+);那麼方法是什麼? – coder

+0

爲什麼這是下面的代碼不打印無效日期,即使有3個invlaid date:\t'SimpleDateFormat sdf = new SimpleDateFormat(「MM/dd/YYYY」); s = sdf.format(cell.getDateCellValue());模式datePattern = Pattern.compile(「^(0 [1-9] | 1 [012])[ - /。](0 [1-9] | [12] [0-9] | 3 [01] - /.](19|20)\\d\\d$「); \t \t \t \t \t \t Matcher matcher = datePattern.matcher(s); \t \t \t \t \t \t如果(matcher.find()){ \t \t \t \t \t \t System.out的。println(「有效日期:」); \t \t \t \t \t \t} \t \t \t \t \t \t否則{ \t \t \t \t \t \t \t的System.out.println( 「invalidd日期」); \t \t \t \t \t \t}'如果在正則表達式匹配您的日期變量找到一個子 – coder

+0

matcher.find()將返回true。如果你希望變量與你的正則表達式精確匹配,你可以使用matcher.matches()。 –