L'analyse de différents formats de la date en une chaîne de caractères en Java

J'ai une chaîne de caractères qui peut éventuellement contenir une date dans l'un des formats suivants:

2001-01-05 (yyyy-mm-dd)
2001/01/05 (yyyy/mm/dd)
01/05/2001 (dd/mm/yyyy)
01-05-2001 (dd-mm-yyyy)
2001 january 5
2001 5 january
january 5 2001
5 january 2001
january 5
5 january

Je veux être en mesure d'analyser la chaîne de caractères et l'extrait de l'objet Date.

Mon approche était comme suit:

String[] date_formats = {
                            "yyyy-MM-dd",
                            "yyyyy/MM/dd", 
                            "dd/MM/yyyyy",
                            "dd-MM-yyyy",
                            "yyyy MMM dd",
                            "yyyy dd MMM",
                            "dd MMM yyyy",
                            "dd MMM",
                            "MMM dd",
                            "dd MMM yyyy"};

String output_date = null;
for (String formatString : date_formats)
{
     try
     {    
         Date mydate = new SimpleDateFormat(formatString).parse(token);
         SimpleDateFormat outdate = new SimpleDateFormat("yyyyMMdd");
         output_date = outdate.format(mydate);
         break;
     }
     catch (ParseException e) {
         System.out.println("Next!");
     }
 }

Cela ne semble pas fonctionner comme prévu. Surtout pour les dates comme 5 janvier 2001, etc. Comment dois-je faire?

Quel est le problème avec les motifs? docs.oracle.com/javase/7/docs/api/java/text/...
Toujours fournir des paramètres régionaux de votre format de date lorsque vous souhaitez analyser date dans une langue particulière. (new SimpleDateFormat("{format}", Locale.ENGLISH);)
Rien maintenant que vous avez fixé.
Cela ne fonctionne toujours pas correctement les dates comme 5 janvier 2001. Il satisfait le MMM jj aaaa motif et la date je finis par obtenir est 00100624 qui est totalement arbitraire.
Voir ma réponse.

OriginalL'auteur Alagappan Ramu | 2013-10-02