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 Calendar (Bug ?)


Sujet :

Langage Java

  1. #1
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 18
    Par défaut Problème Calendar (Bug ?)
    Bonjour,
    Suite à la création d'un calendrier je me suis aperçu d'un problème.

    Le code ci dessous me renvoie "date : 2002-06-01" alors que je m'attendais à "date : 2002-05-31"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Calendar calendar = GregorianCalendar.getInstance();
    		calendar.set(Calendar.DAY_OF_MONTH, 31);//jour
    		calendar.set(Calendar.MONTH, 05);//mois
    		calendar.set(Calendar.YEAR, 2002);//annee
    		calendar.add(Calendar.MONTH, -1);
    		SimpleDateFormat formatter = new SimpleDateFormat ("yyyy-MM-dd" );
    		System.out.println("date : " + formatter.format(calendar.getTime()));
    Je n'ai pas essaye pour toute les date mais est ce qu'il y aurait un bug?
    Version Java : 1.6.0_05

    Merci de votre réponse.
    Bonne journée

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Ton problème vient du fait que l'API de Calendar a eu la "bonne" idée de faire commencer les index des mois à zéro.
    Ainsi :
    • 0 janvier
    • 1 février
    • 2 mars

    Il faut utiliser les constantes Calendar.JANUARY...



    Et par défaut les Calendar sont en mode "lenient", ce qui signifie qu'il essayera d'interpréter une date erroné en la transformant en une date correcte.

    Donc avec le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    calendar.set(Calendar.DAY_OF_MONTH, 31);//jour
    calendar.set(Calendar.MONTH, 05);//mois
    calendar.set(Calendar.YEAR, 2002);//annee
    Tu demandes le 31 juin 2002, ce qui n'existe pas et est transformé en 1 juillet 2002.

    Ensuite comme tu enlèves un mois tu te retrouves au premier juin...


    a++


    PS : Tu peux te tourner vers Joda Time pour une API de date plus complète et plus simple...

  3. #3
    Membre expérimenté
    Inscrit en
    Juin 2003
    Messages
    292
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 292
    Par défaut
    je crois parceque tu set the date of the month a 31 tu apres tu fais un set month a juin. puisqu il n y a pas de 31 juin le calendrier change pour le 1er juillet et finalemen tu fais un month -1 ce qui te retourne le 1er juin.

  4. #4
    Membre expérimenté
    Inscrit en
    Juin 2003
    Messages
    292
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 292
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Salut,


    Ton problème vient du fait que l'API de Calendar a eu la "bonne" idée de faire commencer les index des mois à zéro.
    Ainsi :
    • 0 janvier
    • 1 février
    • 2 mars

    Il faut utiliser les constantes Calendar.JANUARY...



    Et par défaut les Calendar sont en mode "lenient", ce qui signifie qu'il essayera d'interpréter une date erroné en la transformant en une date correcte.

    Donc avec le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    calendar.set(Calendar.DAY_OF_MONTH, 31);//jour
    calendar.set(Calendar.MONTH, 05);//mois
    calendar.set(Calendar.YEAR, 2002);//annee
    Tu demandes le 31 juin 2002, ce qui n'existe pas et est transformé en 1 juillet 2002.

    Ensuite comme tu enlèves un mois tu te retrouves au premier juin...


    a++


    PS : Tu peux te tourner vers Joda Time pour une API de date plus complète et plus simple...
    Que dire de plus , bravo adiGuba

  5. #5
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 18
    Par défaut
    Merci à tous surtout à adiGuba

    j'ai changé l'ordre et tout passe comme des roulettes.

    merci encore bonne fin de journée a+

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 21/07/2009, 16h06
  2. problème calendar.SelectedDate asp.net c#
    Par samir1985 dans le forum ASP.NET
    Réponses: 9
    Dernier message: 21/06/2009, 00h35
  3. problème calendar avec nested:text
    Par osman.amine dans le forum Struts 1
    Réponses: 1
    Dernier message: 05/11/2007, 11h36
  4. [MySQL] Problème Calendrier bug?
    Par mikosworld dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 23/09/2007, 23h34
  5. Probléme ou BUG (PGSQLv8)?
    Par localhost dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 01/03/2005, 16h51

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