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

Servlets/JSP Java Discussion :

Problème format date - SimpleDateFormat inversion mois/jour


Sujet :

Servlets/JSP Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 43
    Points : 16
    Points
    16
    Par défaut Problème format date - SimpleDateFormat inversion mois/jour
    Bonjour,
    Petit souci avec la date, voici la situation:
    Je récupère une date stockée dans ma base Mysql qui est sous format (yyyy-MM-dd HH:mm:ss)
    je l'affiche dans ma page jsp, le premier problème c'est qu'il m'affiche l'heure de la base + 1h
    ainsi au lieu d'avoir 06/02/2007 13:00:00 j'ai 06/02/2007 14:00:00

    le second problème c'est que je souhaite afficher la date sous le format dd/MM/yyyy HH:mm:ss à l'aide de SimpleDateFormat
    mais il m'affiche ceci MM/dd/yyyy HH:mm:ss i.e il inverse le mois et le jour, si je lui indique le format MM/dd/yyyy HH:mm:ss là il me sort
    dd/MM/yyyy HH:mm:ss, en gros il m'affiche l'inverse de ce que je lui demande.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
    .
    .
    .
    Date modifDate = version.getDateCreation();	
    //le résultat d'un System.out.println(modifDate) donne bien la date stockée 
    //dans la base: 2007-02-06 12:45:49.0 (le .0 à la fin je sais pas d'où ça vient)						  
    creationDateString = dateFormat.format(modifDate);
    Merci d'avance pour votre aide

  2. #2
    Membre expérimenté Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Points : 1 371
    Points
    1 371
    Par défaut
    le .0 a la fin surement les 1000ieme de seconde

    Par contre ton probleme de formatage me parait bizarre. Comment est ce possible qu'il t'affiche l'inverse de ce que tu demandes? Bizarre

    Es-tu sur de toi sur le jour et le mois? Essaye avec le 27 novembre pour voir car si ca se trouve tu as mal rempli ta base (en confondant le jour et le mois) et du fais il te la converti bien mais tu crois qu'elle est mal converti.

    Essaye donc avec une date du jour > 12!

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 43
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par maxf1
    le .0 a la fin surement les 1000ieme de seconde

    Par contre ton probleme de formatage me parait bizarre. Comment est ce possible qu'il t'affiche l'inverse de ce que tu demandes? Bizarre

    Es-tu sur de toi sur le jour et le mois? Essaye avec le 27 novembre pour voir car si ca se trouve tu as mal rempli ta base (en confondant le jour et le mois) et du fais il te la converti bien mais tu crois qu'elle est mal converti.

    Essaye donc avec une date du jour > 12!
    Merci pour la réponse;
    En complément, dans le cas d'une date avec le jour > 12, effectivement, c'est le seul cas où ça marche, c-à-d il m'affiche bien au format que je lui demande, j'ai bien 23/01/2007 et no pas 01/23/2007...j'ai pas de réponse à ça...
    dans le code de ma jsp, je lui demande bien dd/MM/yyyy et dans la base j'ai yyyy-MM-dd.
    Le plus embetant c'est sur l'heure, pourquoi il m'affiche une heure de plus que ce qu'il y a dans la base? Est ce que ça vient de SimpleDateFormat.format?

  4. #4
    Membre expérimenté Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Points : 1 371
    Points
    1 371
    Par défaut
    Il t'affiche une heure de plus par rapport à l'heure qu'il y a dans ta base?
    Ca vient surement de ta locale qui doit etre configurer en GMT+2. Donc quand tu formats il te convertit dans ton GMT. Mais tu preciser le GMT que tu veux lorsque tu formates;

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 43
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par maxf1
    Il t'affiche une heure de plus par rapport à l'heure qu'il y a dans ta base?
    Ca vient surement de ta locale qui doit etre configurer en GMT+2. Donc quand tu formats il te convertit dans ton GMT. Mais tu preciser le GMT que tu veux lorsque tu formates;
    Oui c 'est bien ca, j'ai fini par trouver la solution.
    Il suffit de lui preciser la locale en effet.
    concretement j'ai mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss Z");
    merci pour ton aide

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 43
    Points : 16
    Points
    16
    Par défaut c'est pas fini ...
    J'ai fermé trop vite le sujet, parce que j'ai tjr pas résolu mon problème de d'inversion de date et jour...mes pages jsp m'affichent encore l'inverse de ce que je lui demande. (i.e MM/dd/yyyy au lieu de dd/MM/yyyy), je rappelle que j'utilise SimpleDateFormat.
    La solution provisoire c'est d'inverser dans le code, mettre MM/dd/yyyy, comme ça il m'affiche bien dd/MM/yyyy...mais bon c'est pas une solution satisfaisante.
    j'ai fait ça aussi pour tester:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Date maDateAvecFormat=new Date("12/03/2007 17:34:05");
    System.out.println(maDateAvecFormat);
    SimpleDateFormat dateStandard = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
    System.out.println("Format date dd/MM/yyyy :"+dateStandard.format(maDateAvecFormat));
    résultat:
    Mon Dec 03 17:34:05 CET 2007
    Format date dd/MM/yyyy :03/12/2007 17:34:05
    on voit que la date créée est non pas 12 Mars 2007 mais 3 Dec 2007 (inversion mois/jour)
    si je met un jour > 12 par exemple:
    19/03/2007 17:34:05
    ça me donne :
    Thu Jul 03 17:34:05 CEST 2008
    Format date dd/MM/yyyy :03/07/2008 17:34:05
    donc date crée forcément au format MM/dd/yyyy ???

    Pour revenir exactement dans mon cas:
    Je récupère de ma base Mysql une date de ce format:
    2007-02-05 16:50:42.0
    sur laquelle j'applique mon SimpleDateFormat.format:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss Z");
    creationDateString = dateFormat.format(modifDate); //modifDate est la date ci-dessus
    et ça m'affiche 02/05/2007 16:50:42
    alors que ça devrait être 05/02/2007 16:50:42

  7. #7
    Membre expérimenté Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Points : 1 371
    Points
    1 371
    Par défaut
    Normal tu ne construits pas bien ta Date. Si tu veux le 12 Mars il faut ecrire 03/12!! En pattern anglais!

    Mais la classe Date est dépassé. Mieux vaut utiliser la classe Calendar:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Calendar c = Calendar.getInstance();
    		c.set(2007, 03, 13, 17, 34, 05);
    		SimpleDateFormat dateStandard = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
    		System.out.println("Format date dd/MM/yyyy :"+dateStandard.format(c.getTime()));

    Résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Format date dd/MM/yyyy :13/04/2007 17:34:05

  8. #8
    Membre averti Avatar de florentB
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2006
    Messages
    332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Décembre 2006
    Messages : 332
    Points : 441
    Points
    441
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss Z"); creationDateString = dateFormat.format(modifDate); //modifDate est la date ci-dessus

    et ça m'affiche 02/05/2007 16:50:42
    alors que ça devrait être 05/02/2007 16:50:42
    Tu fais un
    new SimpleDateFormat("MM/dd/yyyy HH:mm:ss Z");
    Modifie ta chaine avec new SimpleDateFormat("dd/MM/yyyy HH:mm:ss Z");
    Tu mettais tes mois avant les jours dans ta chaine.

    Florent_b

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 43
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par florentB
    Tu fais un
    Modifie ta chaine avec new SimpleDateFormat("dd/MM/yyyy HH:mm:ss Z");
    Tu mettais tes mois avant les jours dans ta chaine.

    Florent_b
    Pardon je me suis trompé dans mon code, à l'origine j'ai bien mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new SimpleDateFormat("dd/MM/yyyy HH:mm:ss Z");
    avec ça il m'affiche l'inverse sous format MM/dd/yyyy HH:mm:ss

    Donc d'après toi maxf1, c'est normal, il le comprends qu'au format anglais...
    Je vais tester ta suggestion d'utiliser Calendar...
    Merci à tous

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

Discussions similaires

  1. [Toutes versions] Copier une date sans inverser le jour et le mois
    Par peofofo dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 01/05/2009, 17h29
  2. Problème format Date avec VS2003
    Par vaohdan dans le forum Windows Forms
    Réponses: 1
    Dernier message: 07/05/2007, 12h06
  3. date en année/mois/jour
    Par marcusien dans le forum Windows Forms
    Réponses: 6
    Dernier message: 13/03/2007, 14h58
  4. [Requete] Inversion mois/jours lors de resultat nul
    Par Jeremie_Vi dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 06/07/2006, 12h47
  5. [ACCESS] probleme Inversion Mois/Jours
    Par fredrider dans le forum Access
    Réponses: 10
    Dernier message: 26/06/2006, 17h37

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