我正在使用字段Duration
解析几个文档。但在不同的文件中,它采用不同的格式,例如:
"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);
}
提前致谢
答案 0 :(得分:1)
如果这些都是您已知的输入格式,请将输入转换为预期的日期格式。
只需将所有:
字符串替换为.
,然后移除s
。
答案 1 :(得分:1)
不要忘记剥离空间。顺便说一句,“113.046”对我来说似乎有点奇怪的日期格式 - 如果我在你的鞋子里,我会使用一些标准的日期时间格式并转换不规则的格式。
答案 2 :(得分:1)
您可以在regex的帮助下匹配模式,然后相应地format。这是一个启动示例:
Map<Pattern, DateFormat> dateFormatPatterns = new HashMap<Pattern, DateFormat>();
dateFormatPatterns.put(Pattern.compile("\\d{1,2}:\\d{2}"), new SimpleDateFormat("H:m"));
dateFormatPatterns.put(Pattern.compile("\\d{1,3}\\.\\d{3}"), new SimpleDateFormat("s.S"));
dateFormatPatterns.put(Pattern.compile("\\d{1,2}\\.\\d{2} s"), new SimpleDateFormat("s.S '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;
}
}
}
这会产生
00:43:00 00:01:53 00:00:21
答案 3 :(得分:0)
我的解决方案,根本不聪明:
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;
}
如果有人能找到更好的解决方案,请告诉我。 谢谢大家!