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 :

Date et sortie console énigmatique.


Sujet :

Langage Java

  1. #1
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 76
    Points : 81
    Points
    81
    Par défaut Date et sortie console énigmatique.
    Bonjour à Tous,

    J'ai parcouru le forum pour voir si des utilisateurs avaient déjà eu mon problème et je ne l'ai pas trouvé. Alors voila je vous le soumet

    Mon code:

    public static void main(String[] args) {

    GregorianCalendar goodDate=new GregorianCalendar();
    goodDate.set(2005,10,31,10,59,15);
    System.out.println(goodDate.get(Calendar.MONTH));

    }

    La sortie console affiche 11.
    Ma question vous l'avez peut etre deviné: Pourquoi 11 et pas 10?


    Edit:
    goodDate.set(2005,10,01,10,59,15); renvoi bien 10 en sortie console

  2. #2
    Membre averti Avatar de nicotine002
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 577
    Points : 409
    Points
    409
    Par défaut
    Je crois ,pas sûr que quand tu utiliste set, 0=Janvier donc là tu as choisis de mettre le mois de novembre avec la méthode set.

    Et quand tu fais un get, il te renvoie le mois de novembre et donc le 11ième mois.

    Enfin c'est pas sûr mais çà m'a l'air d'être comme ca dans l'api,
    Pour set :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    month - the value used to set the MONTH time field. Month value is 0-based. e.g., 0 for January.

  3. #3
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 76
    Points : 81
    Points
    81
    Par défaut
    Oui tu as raison. Merci bcp. Je ne cherchais pas la la source du problème

    Les index des mois commence à 0.
    Octobre en java est le 9ieme mois et non le 10ieme comme le commun des mortels l'entend.
    10 = novembre pour Java et le 31 novembre n'existe pas, il se permet donc de passer au mois suivant sans prévenir.

  4. #4
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,



    Citation Envoyé par boutade80
    Ma question vous l'avez peut etre deviné: Pourquoi 11 et pas 10?
    La réponse se trouve tout simplement dans la doc :
    http://javasearch.developpez.com/j2s...dar.html#MONTH
    The first month of the year is JANUARY which is 0;
    Les mois commence à 0 !!!

    Du coup ta date est incorrect, car au lieu du 31 octobre, tu crées une date qui représente le 31 novembre (10==NOVEMBER)... Et comme c'est une date incorrect elle est transformé en 1er décembre... d'où le 11 !


    Tu peux t'en apercevoir facilement en affichant la date :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    GregorianCalendar goodDate=new GregorianCalendar();
    goodDate.set(2005,10,31,10,59,15);
    System.out.println(goodDate.getTime()); // affiche "Thu Dec 01 10:59:15 GMT+01:00 2005"

    Tu peux éviter ce type de phénomène en utilisant un Calendar non-lénient, qui provoquera une exception en cas de date incorrecte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    GregorianCalendar goodDate=new GregorianCalendar();
    goodDate.setLenient(false);
    goodDate.set(2005,10,31,10,59,15); // crash !
    a++


    [edit] outch ! doublement grillé

  5. #5
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 76
    Points : 81
    Points
    81
    Par défaut
    Merci

Discussions similaires

  1. Delphi Highlander : dates de sortie
    Par Négrier dans le forum Delphi
    Réponses: 1
    Dernier message: 10/11/2006, 13h35
  2. Réponses: 3
    Dernier message: 20/10/2006, 17h41
  3. Réponses: 6
    Dernier message: 25/03/2006, 17h09
  4. [IDE][VS2005] Quelle date de sortie en Français ?
    Par arno2000 dans le forum EDI/Outils
    Réponses: 5
    Dernier message: 07/02/2006, 18h05
  5. Réponses: 7
    Dernier message: 02/09/2005, 16h15

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