2012-08-17 59 views
1

我需要檢查輸入是否與時間戳格式相匹配yyyy-MM-dd'T'HH:mm:ss.SSS如何驗證輸入是否與特定時間戳格式匹配?

例如, 2012-08-16T11:07:10.793

我該怎麼辦?

+0

難道你不能只是將輸入轉換爲日期對象,然後執行比較? – Manish 2012-08-17 06:56:14

+2

你甚至嘗試過什麼嗎?或谷歌搜索? – 2012-08-17 07:17:28

回答

5
try { 
    formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS"); 
    date = (Date) formatter.parse("2012-08-16T11:07:10.793"); 
} catch(ParseException e) { 
    // It does not match your input 
} 

還是一如既往地使用正規表示法...

編輯: 考慮到馬巴的錯字。

+1

您當前的格式字符串不起作用。試一試,如果你打印日期變量,你會得到這個日期:* Thu Aug 16 13:19:13 CEST 2012 *。您必須將格式字符串更改爲'yyyy-MM-dd'T'HH:mm:ss.SSS',以毫秒爲單位的格式字符串'S'。就像在他的例子中一樣,將'7933'改爲'793'。現在這個答案是錯誤的,爲什麼upvotes? – maba 2012-08-17 07:37:19

+0

@maba:謝謝,你說得對。 – 2012-08-17 18:02:04

1

正則表達式:

^(\d{4})\D?(0[1-9]|1[0-2])\D?([12]\d|0[1-9]|3[01])(\D?([01]\d|2[0-3])\D?([0-5]\d)\D?([0-5]\d)?\D?(\d{3})?)?$ 

對不起,我遲到編輯。 如果你只是想檢查日期的模式相匹配,你可以使用這樣的正則表達式:

String date = "2012-08-16T11:07:10.793"; 
    String regex = "^(\\d{4})\\D?(0[1-9]|1[0-2])\\D?([12]\\d|0[1-9]|3[01])(\\D?([01]\\d|2[0-3])\\D?([0-5]\\d)\\D?([0-5]\\d)?\\D?(\\d{3})?)?$"; 
    Pattern p = Pattern.compile(regex); 
    Matcher m = p.matcher(date); 

    if (m.matches()) { 
     System.out.println("Yes it matches"); 
    } else { 
     System.out.println("No match"); 
    } 
+1

正則表達式是正確的,但你應該詳細說明OP如何使用它。也許是'Pattern'和'Matcher'類的例子。 – maba 2012-08-17 07:50:15

+0

感謝您的提示。 – BigAl 2012-08-23 19:24:39