IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Problème avec SimpleDateFormat


Sujet :

Langage Java

  1. #1
    Rédacteur

    Homme Profil pro
    Geek entrepreneur
    Inscrit en
    Novembre 2004
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Geek entrepreneur

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 224
    Points : 2 373
    Points
    2 373
    Par défaut Problème avec SimpleDateFormat
    Bonjour, j'ai des petits soucis avec simple date format.

    Le format que j'ai en entrée est celui ci :
    2006-06-08 17:34:10.457000
    (les 000 sont inutiles et valent toujours 000)

    Si j'utilise le pattern : "yyyy-MM-dd HH:mm:ss", ca marche mais j'ai pas les milli secondes
    Si j'utilise le pattern : "yyyy-MM-dd HH:mm:ss.SSS", un print de ma date obtenue m'affiche : Thu Jun 08 17:41:47 CEST 2006... Mes minutes secondes ont changé...

    J'ai essayé avec les locales US et FRENCH, même résultat. J'ai essayé avec setLenient (false), cette fois j'obtiens une exception.

    Une idée sur l'absence des millisecondes ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
            // date au format : 2006-06-08 17:34:15.908000
            SimpleDateFormat format = new SimpleDateFormat ("yyyy-MM-dd HH:mm:ss.SSS",Locale.US);
            //format.setLenient(false);
            Date dDateLogInformation = format.parse(__sDateLog);

  2. #2
    Membre éclairé Avatar de sozie9372
    Inscrit en
    Mai 2005
    Messages
    713
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 713
    Points : 724
    Points
    724
    Par défaut
    Le fait de créer une date va la formater à la sauce 'Date'...
    Il faut que tu la reformattes avant de la traiter...
    Tu peux essayer un truc comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SimpleDateFormat format = new SimpleDateFormat(
    				"yyyy-MM-dd HH:mm:ss.SSS", Locale.US);
    // format.setLenient(false);
    Date d = format.parse("2006-06-08 17:35:10.457000");
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd:HH:mm.ss.SSS");
    String s = formatter.format(d);
    System.out.println(s);
    Il doit y avoir d'autres moyen, mais c'est le seul que je vois

  3. #3
    Rédacteur

    Homme Profil pro
    Geek entrepreneur
    Inscrit en
    Novembre 2004
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Geek entrepreneur

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 224
    Points : 2 373
    Points
    2 373
    Par défaut
    C'est déjà ce que je fais, je ne vois pas de différence ?
    __sDateLog est une string égal à 2006-06-08 17:35:10.457000

    D'ailleurs tu peux tester ton exemple, chez moi il produit
    2006-06-08:17:42.47.000
    les minutes, secondes et millisecondes ne sont plus bonnes.

  4. #4
    Membre éclairé Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Points : 683
    Points
    683
    Par défaut
    Ton erreur viens du fait qu'il considère que "2006-06-08 17:35:10.457000" (pour le <<pattern>> "yyyy-MM-dd:HH:mm.ss.SSS") représente 35 minutes 10 secondes et 457000 milisecondes, soit 42 minutes et 47 secondes : SimpleDateFormat ne sait pas où s'arrête ton expression ; tu peux contourner en ne formatant que le début de ton expression (sans les 3 zeros inutiles en fin!) ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    String test = "2006-06-08 17:35:10.457000";
    String pattern = "yyyy-MM-dd:HH:mm.ss.SSS";
    if (test.length() > pattern.length()) {
      test = test.substring(0,pattern.length());
    }
    DateFormat convertisseur = new SimpleDateFormat(pattern);
    Date resultat = convertisseur.parse(test);

  5. #5
    Membre éclairé Avatar de sozie9372
    Inscrit en
    Mai 2005
    Messages
    713
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 713
    Points : 724
    Points
    724
    Par défaut
    Désolé, je t'ai proposé un truc qui ne fonctionne pas (enfin pas correctement) Je viens d'essayer . La solution de g_rare est une alternative possible, tu vires les 3 zéros de la fin avant d'appliquer ton pattern...

  6. #6
    Rédacteur

    Homme Profil pro
    Geek entrepreneur
    Inscrit en
    Novembre 2004
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Geek entrepreneur

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 224
    Points : 2 373
    Points
    2 373
    Par défaut
    Ok, merci, l'idée était effectivement bonne et marche.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec SimpleDateFormat.parse(Date)
    Par nad dans le forum Langage
    Réponses: 2
    Dernier message: 09/06/2006, 13h34
  2. [date] Problème avec SimpleDateFormat
    Par elzedo dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 29/01/2006, 23h47
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo