2011-09-29 86 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上面所建议的那样,创建一个有效格式的列表,并尝试匹配每个格式。