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

时间:2011-09-29 14:31:18

标签: java regex

  

可能重复:
  generically parsing String to date

以下情况:

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

2011-09-12 2011年12月9日 12.09.2011 2011-09-01-14:15 ......以及更多的变化

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

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

所以我的问题:

  • 有人知道一个罐装RegExps来实现这个目标吗?
  • 是否有一些Java库可以执行此任务?

谢谢!

3 个答案:

答案 0 :(得分:1)

使用Java的DateFormat

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

根据评论进行修改:

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

还有另一个相同背景的问题,希望链接可以帮助您:Dynamic regex for date time formats