如何使用正则表达式从字符串中提取时间?

时间:2011-03-04 15:39:03

标签: java regex time

问题是时间以不同的形式显示,例如

19:03 
3:29 pm
3:29 PM

如何处理?感谢

4 个答案:

答案 0 :(得分:7)

我建议使用类似SimpleDateFormat的内容来解决此问题。

你可以做的是定义你的日期格式集,然后在循环中解析它们,直到一种格式成功(即不抛出异常)。以下代码片段的内容:

for(SimpleDateFormat fmt : formats) {
    try { 
        return fmt.parse(date, startpos);
    } catch(Exception e) {}
}

当然,这假设您创建了一个不同格式模式的列表。通常,joda-time也是java时间的良好补充。

答案 1 :(得分:2)

除非你为每种可能的时间格式写一个正则表达式并且OR它们在一起,否则你不能简单地使用正则表达式。

我的意思是从

开始
(rgx1|rgx2|rgx3)

其中rgxX是有效时间正则表达式。在您的示例中,您可以尝试

([\d]{1,2}:[\d]{1,2}|[\d]{1,2}:[\d]{1,2} [aApP][mM])

但是这个正则表达式也匹配45:89 PM,这不是一个有效的时间

如果你需要提取一段时间,那么这些是有用的,而如果你需要验证你不能用正则表达式

答案 2 :(得分:1)

我建议使用Joda的DateTimeFormat。与SimpleDateFormat不同,它保证是线程安全的。

答案 3 :(得分:0)

来自DateUtils.parseDate(dateString, patterns[])

Apache Commons / Lang可让您指定将依次尝试的多个模板。如果您能够识别将要发生的所有可能的数据格式,那么这可能是一个选项。