Java 解析前检查日期格式

Java 解析前检查日期格式,java,date,format,feedparser,Java,Date,Format,Feedparser,我正在用字段Duration解析几个文档。但在不同的文件中,其格式不同,例如: "Duration": "00:43" "Duration": "113.046" "Duration": "21.55 s" 我想将它们全部解析为格式“Duration”:“113.046”,在以哪种格式进行任何解析之前,我如何检查 这段代码之前的一些条件,因为这并不适用于所有条件: Long duration; DateFormat sdf = new Simpl

我正在用字段
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);                       
                    }

提前感谢

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


只需将所有的
字符串替换为
,并删除
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;        
    }
long DurationFixer(字符串持续时间){
长持续时间长=0;
if(持续时间包含(“:”){
DateFormat sdf=新的SimpleDataFormat(“mm:ss”);
试一试{
Date durationD=sdf.parse(持续时间);
日期zeroSec=sdf.parse(“00:00:00”);
durationLong=durationD.getTime()-zeroSec.getTime();
}捕获(例外e){
durationLong=(Long.parseLong(duration))/1000;
}
}
否则{
字符串r=“”;
如果(持续时间包含(“s”)){
对于(int i=0;i
如果有人能找到更好的解决办法,请告诉我。
谢谢大家

您可以在的帮助下匹配模式,然后相应地进行匹配。以下是一个启动示例:

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;
        }
    }
}
Map dateFormatPatterns=newhashmap();
dateFormatPatterns.put(Pattern.compile(\\d{1,2}:\\d{2})),新的SimpleDataFormat(“H:m”);
dateFormatPatterns.put(Pattern.compile(\\d{1,3}\\.\\d{3})),新的SimpleDataFormat(“s.s”);
dateFormatPatterns.put(Pattern.compile(\\d{1,2}\\.\\d{2}s),新的SimpleDataFormat(“s.s's”);
字符串[]字符串={“00:43”、“113.046”、“21.55 s”};
DateFormat finalFormat=新的SimpleDateFormat(“HH:mm:ss”);
for(字符串:字符串){
对于(模式:dateFormatPatterns.keySet()){
if(pattern.matcher(string.matches()){
Date-Date=dateFormatPatterns.get(模式).parse(字符串);
字符串formattedTime=finalFormat.format(日期);
System.out.println(格式化时间);
打破
}
}
}
这就产生了

00:43:00 00:01:53 00:00:21 00:43:00 00:01:53 00:00:21
如何处理具有这种格式的文件??“Duration”:“113.046”不需要解析它们,但我需要一些东西来了解它。不管怎样,谢谢。我想转换成长的,秒的数字。有什么建议吗?因为这正是我想要的。谢谢