2010-07-06 5 views
2

Bonjour, Je suis en train d'utiliser le SimpleDateFormatter pour analyser la date Wed, 30 Jun 2010 15:07:06 CSTSimpleDateFormatter ne va pas analyser!

J'utilise le code suivant

public static SimpleDateFormat postedformat = 
    new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z"); 
Date newDate = new Date(posteformat.parse("Wed, 30 Jun 2010 15:07:06 CST")); 

mais je reçois un IllegalArgumentException. S'il vous plaît aider!

+0

Sur quelle ligne obtenez-vous l'exception IllegalArgumentException? –

+0

Obtenir l'exception sur l'appel d'analyse – schwiz

+2

Par ailleurs: n'utilisez pas SimpleDateFormat comme constante. En raison d'un problème de conception avec SimpleDateFormat, il ne peut pas être utilisé en toute sécurité par plusieurs threads à la fois. Le moyen le plus sûr d'éviter ce problème est de toujours créer une nouvelle instance d'un SimpleDateFormat lorsque vous avez besoin de l'utiliser. –

Répondre

4

postedformat.parse() renvoie Date et il n'existe aucun constructeur Date(Date).

On peut supposer que la suppression de l'appel à new Date, vous dire Date newDate = poste.... suffira

+0

... et si c'est le cas, il suffit d'ajouter .getTime() après l'expression d'analyse pour utiliser le constructeur new Date (Long). – vlood

+0

Bonne prise! Le résultat de l'analyse est déjà un objet Date. Mais alors je m'attendais à une erreur de compilation, pas à un problème d'exécution. Pourrait être une faute de frappe dans la question. –

+0

c'était le problème merci – schwiz

3

Votre fragment de code ne compile pas. Cette légère modification compile et analyse avec succès:

public static void main(String[] args) throws ParseException { 
    SimpleDateFormat postedformat = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z"); 
    Date newDate = postedformat.parse("Wed, 30 Jun 2010 15:07:06 CST"); 
    System.out.println("newDate = " + newDate); 
} 

Ce utilise Java 6 sous Mac OS X.

1

Il n'y a pas de constructeur java.util.Date() qui prend java.util.Date comme argument

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

public class DateFormat { 
    public static SimpleDateFormat postedformat = 
     new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z"); 
    public static void main(String[] args) { 
     try { 
      Date newDate = postedformat.parse("Wed, 30 Jun 2010 15:07:06 CST"); 
      System.out.println("Date: " + newDate); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

Sorties:

Date: Wed Jun 30 22:07:06 BST 2010 
+0

Mais vous ne devriez pas être capable de compiler quelque chose avec 'new Date (new Date()))' –

1

Les exemples de javadoc montrent unescap ed comma mais pour les paramètres régionaux des États-Unis. Donc, soit essayer d'échapper à la virgule (comme Aaron suggéré) ou utiliser l'autre constructeur et définissez les paramètres régionaux:

new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z", Locale.US); 

Un autre problème pourrait être le fuseau horaire (« CST ») qui est dépréciée sur la portée de main et mal assurés sur la autre (selon javadoc de java.util.TimeZone). Test, si cela fonctionne sans l'attribut timezone (dans le format String et la valeur).