2010-08-31 3 views
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);      
        } 

Заранее спасибо

ответ

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 
+0

Sinmething вот что я искал. Спасибо! –

+0

Добро пожаловать. – BalusC

1

Если это все ваши известные форматы ввода, а затем преобразовать свой вклад в ваш ожидаемый формат даты.

Just string-замените все : на . и удалите s.

+0

И что делать с файлами, которые имеют этот формат ?? «Длительность»: «113.046» Нет необходимости разбирать их, но мне нужно что-то знать об этом раньше. Спасибо в любом случае –

1

Не забудьте также снять пробелы. Кстати, «113.046» кажется мне нечетным форматом даты - если бы я был на твоем месте, я бы использовал некоторые стандартные форматы даты и конвертировал нерегулярные.

+0

Я хочу преобразовать в длинный, миллиметр секунд. Любое предложение? –

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

Если кто-то может найти лучшее решение, пожалуйста, скажите мне. Спасибо всем!

Смежные вопросы