1

フィールドでいくつかのドキュメントを解析しています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);                       
                    }

前もって感謝します

4

4 に答える 4

1

これらがすべて既知の入力形式である場合は、入力を予想される日付形式に変換します。

:文字列だけ-すべてをに置き換えて.削除しsます。

于 2010-08-31T10:42:55.240 に答える
1

スペースも削除することを忘れないでください。ちなみに、「113.046」は少し奇妙な日付形式のように思えます。もし私があなたの立場にあったとしたら、標準の日付時刻形式のいくつかを使用して、不規則な形式に変換したでしょう。

于 2010-08-31T10:49:16.423 に答える
1

正規表現を使用してパターンを一致させ、それに応じてフォーマットすることができます。キックオフの例は次のとおりです。

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
于 2010-08-31T12:19:52.933 に答える
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;        
    }

誰かがより良い解決策を見つけることができたら、教えてください。みんなありがとう!

于 2010-08-31T11:54:58.963 に答える