114 votes

Comment analyser chaîne de date à Date?

Comment analyser la chaîne de Date ci-dessous pour objet Date???

String target = "Thu Sep 28 20:29:30 JST 2000";
DateFormat df = new SimpleDateFormat("E MM dd kk:mm:ss z yyyy");
Date result =  df.parse(target);  

Throws exception...

java.text.ParseException: Unparseable date: "Thu Sep 28 20:29:30 JST 2000"
        at java.text.DateFormat.parse(DateFormat.java:337)

173voto

BalusC Points 498232

Le modèle est faux. Vous avez un 3-lettre jour abréviation, donc il doit être EEE. Vous avez un 3 lettres de l'abréviation, donc il doit être MMM. Comme ceux du jour et du mois abréviations sont de paramètres régionaux sensible, vous souhaitez spécifier explicitement l' SimpleDateFormat paramètres régionaux de l'anglais aussi bien, sinon il va utiliser la plate-forme de paramètres régionaux par défaut qui peuvent ne pas être anglais en soi.

public static void main(String[] args) throws Exception {
    String target = "Thu Sep 28 20:29:30 JST 2000";
    DateFormat df = new SimpleDateFormat("EEE MMM dd kk:mm:ss z yyyy", Locale.ENGLISH);
    Date result =  df.parse(target);  
    System.out.println(result);
}

Cela s'imprime ici

Thu Sep 28 07:29:30 BOT 2000

ce qui est correct comme pour mon fuseau horaire.

Je voudrais également reconsidérer si vous n'auriez pas plutôt faire un usage HH au lieu de kk. Lire la javadoc pour plus de détails sur valide les modèles.

13voto

miku Points 63392

Voici un exemple:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.text.DateFormat;
import java.util.Date;

public class j4496359 {
    public static void main(String[] args) {
        try {
            String target = "Thu Sep 28 20:29:30 JST 2000";
            DateFormat df = new SimpleDateFormat("EEE MMM dd kk:mm:ss zzz yyyy");
            Date result =  df.parse(target);
            System.out.println(result); 
        } catch (ParseException pe) {
            pe.printStackTrace();
        }
    }
}

Affichera:

Thu Sep 28 13:29:30 CEST 2000

11voto

String target = "27-09-1991 20:29:30";
DateFormat df = new SimpleDateFormat("dd MM yyyy HH:mm:ss");
Date result =  df.parse(target);
System.out.println(result); 

Cela fonctionne bien?

4voto

dennis Points 116

J'ai eu ce problème, et j'ai mis l' Locale de US, alors qu'il travail.

static DateFormat visitTimeFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy",Locale.US);

pour String "Sun Jul 08 00:06:30 UTC 2012"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X