检测String内容是否为DateTime的方法 – RegExp?

可能重复:
通常解析String到目前为止

以下情况:

我需要检测String是否包含DateTime / Timestamp。 问题是那些DateTimes有各种格式和粒度,例如:

2011-09-12 12-09-2011 12.09.2011 2011-09-01-14:15 ……还有很多变种

我不需要理解语义(例如,在一天或几个月之间不同)我只需要检测80%最常见的DateTime变体。

我的第一个想法是使用RegExp – 我对此并不熟悉,而且我需要熟悉myselft以及DateTimes可以来的所有变体。

所以我的问题:

  • 有人知道jar装RegExps来实现这一目标吗?
  • 是否有一些Java库可以完成这项任务?

谢谢!!

还有另一个相同上下文的问题,希望链接可以帮助您: 日期时间格式的动态正则表达式

你很难找到一般的比赛。 对于日 – 月 – 年部分,您可以使用类似(\d{1,2}.){2}\d{4} ,它将匹配日期格式为dd * mm * yyyy

我想,DateFormat将是一个更好的选择。 正如John B上面所建议的那样,创建一个有效格式列表并尝试匹配每个格式。

使用Java的DateFormat 。

您可以根据需要设置多种格式,并迭代查找匹配项。 您将不得不捕获不解析的格式的exception,因此该解决方案效率不高但会起作用。

根据评论编辑:

如果您不希望由于性能而产生exception,则需要设置正则表达式列表(您将支持的每种格式一个)。 找到与您的输入匹配的正则表达式(如果有)并将其转换为基于匹配格式的日期。 我建议将DateFormat与每个正则表达式匹配,并让相应的DateFormat在识别出适当的DateFormat后进行解析工作。 这将减少使用正则表达式中的组生成日期时出错的可能性。 就个人而言,我不知道这实际上是否比try / catch更有效,所以我会选择更直接的机制(直接使用DateFormat)。