2010-11-09 6 views
0

J'essaye d'analyser de nombreuses dates de chaînes à Date (s), certaines avec partie de temps, d'autres sans, avec le format "jj/mm/aaaa HH: mm".Java: Impossible d'analyser "23/10/1973" avec le format "jj/mm/aaaa HH: mm"

public static Date StringToDate (String format, String theDate) { 

    SimpleDateFormat df = new SimpleDateFormat(format); 

    Date retDate = null; 
    try { 
    df.setLenient(true); 
    retDate = df.parse(theDate); 
    } 
    catch (ParseException e) { 
    e.printStackTrace(); 
    } 

    return (retDate); 
} 

(ici, le format est toujours "jj/mm/aaaa HH: mm").

Mais cela provoque une exception, même avec setLenient forcé à true. Savez-vous comment je peux convertir à Date beaucoup de chaînes formatées comme "jj/mm/aaaa HH: mm: ss", mais avec des gens sans temps, d'autres sans secondes, et encore d'autres avec tout?

+3

Que diriez-vous d'utiliser différentes chaînes de format en fonction de la longueur de la chaîne de date? –

Répondre

1

Si vous savez que certaines chaînes ont un temps et d'autres pas, et il n'y a pas d'autres cas, je voudrais juste vérifier la longueur de la chaîne. Cependant, si vous avez beaucoup de formats différents disponibles, j'essaierais chacun dans un ordre logique, jusqu'à ce que vous obteniez une date valide.

+0

Wow ... ok ... mais je pensais que "indulgente" permettait d'oublier (ou pas) le moment où vous passez une chaîne plus courte que prévu. Cela ne semble pas être le cas. Alors ... quel est le but de "clémente"? – Oliver

+1

@ user499417: indulgente (qui est activée par défaut) analyse les dates comme 2010/13/01 comme 2011/01/01 car elle est indulgente sur le nombre de jours dans un mois et dans les mois de l'année. La propriété 'lenient' de' DateFormt' correspond directement à la propriété indulgente de 'Calendar'. Malheureusement, les classes Date, Calendar et DateFormat de Java laissent beaucoup à désirer, c'est pourquoi certaines personnes utilisent Joda. –

0

J'ai toujours deux chaînes d'analyse, et j'analyse deux fois; une fois avec date/heure et une fois avec date seulement.

+0

Wow ... ça marche mais vraiment pas marrant ... – Oliver

Questions connexes