以下情况:
我需要检测String是否包含DateTime / Timestamp。问题是那些DateTimes有各种格式和粒度,例如:
2011-09-12 2011年12月9日 12.09.2011 2011-09-01-14:15 ......以及更多的变化
我不需要理解语义(例如,在一天或几个月之间不同)我只需要检测80%最常见的DateTime变体。
我的第一个想法是使用RegExp - 我对此并不熟悉,而且我需要熟悉myselft以及DateTimes可以来的所有变体。
所以我的问题:
谢谢!
答案 0 :(得分:1)
使用Java的DateFormat。
您可以根据需要设置多种格式,并遍历它们以查找匹配项。您将不得不捕获不解析的格式的异常,因此该解决方案效率不高但会起作用。
根据评论进行修改:
如果您不希望因性能而出现异常,则需要设置正则表达式列表(您将支持的每种格式一个)。找到与您的输入匹配的正则表达式(如果有)并将其转换为基于匹配格式的日期。我建议将DateFormat与每个正则表达式匹配,并让相应的DateFormat在识别出适当的DateFormat后进行解析工作。这将减少使用正则表达式中的组生成日期时出错的可能性。就个人而言,我不知道这实际上是否比try / catch更有效,所以我会选择更简单的机制(直接使用DateFormat)。
答案 1 :(得分:1)
你很难找到一般的比赛。对于日 - 月 - 年部分,您可以使用类似(\d{1,2}.){2}\d{4}
的模式,该模式将匹配日期格式为dd * mm * yyyy
答案 2 :(得分:1)
还有另一个相同背景的问题,希望链接可以帮助您:Dynamic regex for date time formats