在解析之前检查日期格式

我正在使用字段Duration解析几个documments。 但在不同的文件中,它采用不同的格式,例如:

 "Duration": "00:43" "Duration": "113.046" "Duration": "21.55 s" 

我想将它们全部解析为格式"Duration": "113.046" ,我怎么能在以任何格式解析之前检查它?

这段代码之前的一些条件,因为这不适合所有这些:

 Long duration; DateFormat sdf = new SimpleDateFormat("hh:mm:ss"); try { Date durationD = sdf.parse(totalDuration); Date zeroSec = sdf.parse("00:00:00"); duration = durationD.getTime() - zeroSec.getTime(); } catch (Exception e) { duration = Long.parseLong(totalDuration); } 

提前致谢

你可以在正则表达式的帮助下匹配模式,然后相应地格式化 。 这是一个启动示例:

 Map dateFormatPatterns = new HashMap(); dateFormatPatterns.put(Pattern.compile("\\d{1,2}:\\d{2}"), new SimpleDateFormat("H:m")); dateFormatPatterns.put(Pattern.compile("\\d{1,3}\\.\\d{3}"), new SimpleDateFormat("sS")); dateFormatPatterns.put(Pattern.compile("\\d{1,2}\\.\\d{2} s"), new SimpleDateFormat("sS 's'")); String[] strings = { "00:43", "113.046", "21.55 s" }; DateFormat finalFormat = new SimpleDateFormat("HH:mm:ss"); for (String string : strings) { for (Pattern pattern : dateFormatPatterns.keySet()) { if (pattern.matcher(string).matches()) { Date date = dateFormatPatterns.get(pattern).parse(string); String formattedTime = finalFormat.format(date); System.out.println(formattedTime); break; } } } 

这在这里产生

 0点43分○○秒
 0点01分53秒
 ○时00分21秒

如果这些都是您已知的输入格式,则将输入转换为预期的日期格式。

只需字符串替换所有: with . 并删除s

别忘了剥去空间。 顺便说一句,“113.046”对我来说似乎有点奇怪的日期格式 – 如果我在你的鞋子里,我会使用一些标准的日期时间格式并转换不规则的格式。

我的解决方案,根本不聪明:

 long DurationFixer(String duration){ long durationLong = 0; if(duration.contains(":")){ DateFormat sdf = new SimpleDateFormat("mm:ss"); try { Date durationD = sdf.parse(duration); Date zeroSec = sdf.parse("00:00:00"); durationLong = durationD.getTime() - zeroSec.getTime(); } catch (Exception e) { durationLong = (Long.parseLong(duration))/1000; } } else{ String r = ""; if(duration.contains("s")){ for (int i = 0; i < duration.length()-2; i ++) { if ((duration.charAt(i) == '.')) break; else r += duration.charAt(i); } } durationLong = Long.valueOf(r); } return durationLong; } 

如果有人能找到更好的解决方案,请告诉我。 谢谢大家!

Interesting Posts