问题是时间以不同的形式显示,例如
19:03
3:29 pm
3:29 PM
如何处理?感谢
答案 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可让您指定将依次尝试的多个模板。如果您能够识别将要发生的所有可能的数据格式,那么这可能是一个选项。