web-dev-qa-db-fra.com

Comment analyser la chaîne de date en date?

Comment analyser la chaîne de date ci-dessous dans un 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);  

Lance une exception ...

Java.text.ParseException: Unparseable date: "Thu Sep 28 20:29:30 JST 2000"
        at Java.text.DateFormat.parse(DateFormat.Java:337)
112
masato-san

Le modèle est faux. Vous avez une abréviation de 3 lettres par jour, elle doit donc être EEE. Vous avez une abréviation mensuelle de 3 lettres, elle doit donc être MMM. Comme ces abréviations de jour et de mois dépendent des paramètres régionaux, vous souhaitez également spécifier explicitement les paramètres régionaux SimpleDateFormat en anglais, sinon le système utilisera les paramètres régionaux par défaut de la plate-forme, qui ne sont peut-être pas 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);
}

Ceci imprime ici

Jeu. 28 sept. 07:29:30 BOT 2000

ce qui est correct selon mon fuseau horaire.

Je reconsidérerais également si vous ne préférez pas utiliser HH au lieu de kk. Lisez le javadoc pour plus de détails sur les modèles valides.

170
BalusC

Voici un exemple de travail:

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

Imprimera:

Thu Sep 28 13:29:30 CEST 2000
13
miku
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?

11
new SimpleDateFormat("EEE MMM dd kk:mm:ss ZZZ yyyy");

et

new SimpleDateFormat("EEE MMM dd kk:mm:ss Z yyyy");

fonctionne toujours. Cependant, si votre code lève une exception, c'est parce que votre outil ou jdk ou toute autre raison. Parce que j'ai la même erreur dans mon IDE mais veuillez vérifier ces http://ideone.com/Y2cRr (ide en ligne) avec ZZZ et avec Z

la sortie est: Thu Sep 28 11:29:30 GMT 2000

7
user467871

J'ai eu ce problème, et j'ai mis le Locale à US, puis ça marche.

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"

4
dennis

Une exception d'analyse est une exception cochée, vous devez donc l'attraper avec un try-catch lorsque vous travaillez avec l'analyse des chaînes en dates, comme l'a suggéré @miku ...

0
nckbrz