【问题标题】:Check date format before parsing解析前检查日期格式
【发布时间】:2010-08-31 10:17:21
【问题描述】:

我正在解析几个带有字段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);                       
                    }

提前致谢

【问题讨论】:

    标签: java date format feedparser


    【解决方案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

    【讨论】:

    • 我一直在寻找这样的东西。谢谢!
    【解决方案2】:

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

    只需将所有: 替换为. 并删除s

    【讨论】:

    • 以及如何处理具有这种格式的文件? "Duration": "113.046" 没有必要解析它们,但我需要一些东西来了解它。还是谢谢
    【解决方案3】:

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

    【讨论】:

    • 我想转换成long,秒数。有什么建议吗?
    【解决方案4】:

    我的解决方案,一点也不聪明:

    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;        
        }
    

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

    【讨论】:

      猜你喜欢
      • 2021-11-10
      • 2018-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-05
      • 2020-12-25
      • 1970-01-01
      相关资源
      最近更新 更多