2010-08-31 5 views
1

Je suis en train d'analyser plusieurs documents avec le champ Duration. Mais dans les différents fichiers, il est dans les formats differnt, ex:Vérifier le format de la date avant l'analyse

"Duration": "00:43" 
"Duration": "113.046" 
"Duration": "21.55 s" 

Je veux analyser tous au format "Duration": "113.046", comment pourrais-je vérifier avant toute analyse syntaxique au format Wich il est ??

Certaines conditions avant ce morceau de code, parce que ce ne convient pas à tous:

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

Merci à l'avance

Répondre

1

Vous pouvez faire correspondre le modèle avec l'aide de regex puis format en conséquence. Voici un exemple de coup d'envoi:

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

Cela donne ici

 
00:43:00 
00:01:53 
00:00:21 
+0

Quelque chose comme ça était ce que je cherchais. Merci! –

+0

De rien. – BalusC

1

Si ce sont tous vos formats d'entrée connus, puis convertir votre entrée votre format de date attendu.

Juste chaîne-remplacer tous : avec . et supprimer s.

+0

Et que faire avec les fichiers qui ont ce format ?? "Durée": "113.046" Il n'est pas nécessaire de les analyser, mais j'ai besoin de quelque chose pour le savoir avant. Merci quand même –

1

N'oubliez pas de supprimer les espaces, aussi. En passant, "113.046" me semble un format de date un peu bizarre - si j'étais à votre place, j'aurais utilisé certains des formats de date standard et convertis les formats irréguliers.

+0

Je veux convertir en long, le nombre de secondes. Toute suggestion? –

0

Ma solution, pas une bonne idée du tout:

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

Si quelqu'un pouvait trouver une meilleure solution, s'il vous plaît, dites-moi. Merci à tous!