Question

La chaîne que je souhaite formater ressemble à ceci :Chaîne datetime = "9/1/10 11:34:35 AM"

Le modèle suivant pour les travaux de SimpleDateFormat :

SimpleDateFormat sdf = SimpleDateFormat("M/d/yy h:mm:ss");
Date d = sdf.parse(datetime);
System.out.println(d);

Output> [Wed Sep 01 11:34:35 CEST 2010]

Cependant, je dois également analyser le marqueur AM/PM, et lorsque je l'ajoute au modèle, je reçois une exception.

Modèle qui ne fonctionne pas :

SimpleDateFormat sdf = SimpleDateFormat("M/d/yy h:mm:ss a");

J'ai également essayé avec ceci, avec la même exception :

SimpleDateFormat sdf = SimpleDateFormat("M/d/yy h:mm:ss aa");

Exception:

java.text.ParseException: Unparseable date: "9/1/10 11:34:35 AM"

J'ai regardé l'API sur http://download.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html#text mais je n'arrive pas à trouver où je fais du mal.

Aucune suggestion?

Était-ce utile?

La solution

Il est possible que votre Locale par défaut a des symboles pour AM / PM. Lors de la construction d'un format de date, vous devez toujours fournir un Locale à moins que vous voulez vraiment utiliser le Locale par défaut du système, par exemple:.

SimpleDateFormat sdf = new SimpleDateFormat("M/d/yy h:mm:ss a", Locale.US)

Autres conseils

Je prends un exemple de la date indiquée ci-dessous et imprimer la date formatée dans le format 24 heures si convient à vos besoins.

 String inputdate="9/1/10 11:34:35 AM";
        SimpleDateFormat simpleDateFormat=new SimpleDateFormat("dd/MM/yy hh:mm:ss aa",Locale.getDefault());
        try {
            System.out.println(""+new SimpleDateFormat("dd/MM/yy HH:mm:ss",Locale.getDefault()).format(simpleDateFormat.parse(inputdate)));

        } catch (ParseException e) {
            e.printStackTrace();
        }

Si vous avez encore une requête, S'il vous plaît répondre. Merci.

réponse moderne:

    String datetime = "9/1/10 11:34:35 AM";
    LocalDateTime dt = LocalDateTime.parse(datetime, 
            DateTimeFormatter.ofPattern("M/d/yy h:mm:ss a", Locale.ENGLISH));

Ceci produit un LocalDateTime de 2010-09-01T11: 34: 35. Méfiez-vous des années à deux chiffres, cependant; DateTimeFormatter supposera 2000 à 2099. Pour mon anniversaire, cela aurait été incorrect.

Nous avons encore besoin de fournir les paramètres régionaux. Étant donné que les marqueurs AM / PM ne sont guère utilisés dans la pratique dans d'autres lieux que l'anglais, je considérais Locale.ENGLISH un pari assez sûr. S'il vous plaît remplacer votre propre.

Les autres réponses sont des réponses fines en 2010 et 2011. Déjà en 2014 ce qui précède était valide et j'aurais préféré.

Si vous travaillez avec FreeMarker pour Java et que vous abordez ce problème, utilisez le code ci-dessous.J'ai eu ce problème, mes paramètres régionaux ont défini AM/PM sur DE.Pas certain de pourquoi...<#setting locale="en_US">

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top