2011-09-29 31 views
1

可能重複:
generically parsing String to date如何檢測字符串內容是否爲DateTime - RegExp?

以下情況:

我需要檢測如果字符串包含一個DateTime /時間戳。問題是,那些DateTime是否有各種形式和粒度,如:

2011-09-12 2011年12月9日 12.09.2011 2011-09-01-14:15 ...等等更多的變體

我不需要了解語義(例如在一天或幾個月之間不同)我只需要檢測80%的最常見的DateTime變體。

我的第一個想法是使用RegExp--我不太熟悉,而且我需要熟悉所有DateTimes可以來的變體。

所以我的問題:

  • 是否有人知道一個罐頭正則表達式來實現這一目標?
  • 是否有一些Java庫可以完成這項任務?

謝謝!!

+1

同樣的問題爲http://計算器。com/questions/7596052 /通常解析字符串的最新版本 –

+0

它在Java中吸取了一點點,就像在.Net中一樣,您將有一個可以完成這項工作的DateTime.parse(..)。 –

回答

1

使用Java的DateFormat

您可以根據需要設置多種格式,並遍歷它們尋找匹配項。你將不得不爲不解析的格式捕捉異常,所以這個解決方案效率不高,但會起作用。根據註釋

編輯:

如果你不希望有由於性能例外,你將需要設置正則表達式的列表(一個給你支持各種格式)。找到與您的輸入匹配的正則表達式(如果有的話),並根據匹配的格式將其轉換爲日期。我會建議將匹配一個DateFormat到每個正則表達式,並讓適當的DateFormat做解析工作,一旦你確定了適當的DateFormat。這將減少使用正則表達式中的組產生錯誤的機會。就個人而言,我不知道這是否會比try/catch更有效,所以我會選擇更直接的機制(直接使用DateFormat)。

+0

由於潛在的性能影響,我想避免嘗試/趕上...但是 - 這將是一個解決方案。 –

+0

見編輯。還有7個去 –

1

你將很難找到一個通用匹配。對於日 - 月 - 年的部分,你可以使用像(\d{1,2}.){2}\d{4}這樣的模式,其格式將與日期格式dd * mm * yyyy

DateFormat將是一個更好的選擇,我想。正如約翰B上面所建議的那樣,創建一個有效格式的列表,並嘗試匹配每個格式。

相關問題