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

Collection et Stream Java Discussion :

Comportement non fiable de "Calendar" ?


Sujet :

Collection et Stream Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Comportement non fiable de "Calendar" ?
    Bonjour,

    Il semble que les objets de type "Calendar" modifient parfois l'heure qu'on leur donne sans prévenir. Ici, en fonction du mois "2" (février) alors que le changement d'heure était fixé en mars.

    Pour info, JDK = 1.4.2

    Pour vérifier cela, voici un bout de code à tester dans une classe de test, dans un "main" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Calendar cal = new GregorianCalendar(2006,2,26,2,0);
    System.out.println(cal.get(Calendar.HOUR_OF_DAY));
    // retourne 3 = illogique ???
     
    cal.set(2006, 3, 26, 2, 0);
    System.out.println(cal.get(Calendar.HOUR_OF_DAY));
    // retourne 2 = logique
     
    cal.set(2006, 4, 26, 2, 0);
    System.out.println(cal.get(Calendar.HOUR_OF_DAY));
    // retourne 2 = logique
    Une idée ?

  2. #2
    Membre expérimenté Avatar de yann2
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 897
    Points : 1 635
    Points
    1 635
    Par défaut
    Bonjour

    Je trouve ça prétentieux de critiquer une API qui fonctionne parfaitement...

    Si tu avais utilisé les constantes définies dans Calendar tu n'aurais pas eu de problème.

    2 ne correspond pas à février mais à mars.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Calendar cal = new GregorianCalendar(2006,Calendar.FEBRUARY,26,2,0);
    System.out.println(cal.get(Calendar.HOUR_OF_DAY));
     
    cal.set(2006, Calendar.MARCH, 26, 2, 0);
    System.out.println(cal.get(Calendar.HOUR_OF_DAY));
    // retourne 2 = logique
     
    cal.set(2006, Calendar.APRIL, 26, 2, 0);
    System.out.println(cal.get(Calendar.HOUR_OF_DAY));
    // retourne 2 = logique
    yann

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Je viens de le remarquer également et puis j'ai placé un point d'interrogation, pas une affirmation ;-)

    L'API n'indique cependant pas la manière dont est effectué le changement d'heure (qui est fixé à 5 ans d'après ce que j'ai lu sur http://www.industrie.gouv.fr/energie...s/se_heur.htm).

    Mon problème est que je dois calculer des intervalles de temps en minutes entre 2 périodes et que pour les heures d'été, l'heure 2 n'existe pas (Calendar la fait automatiquement passer à 3) et pour les heures d'hiver, l'heure 2 existe 2 fois.

  4. #4
    Expert éminent sénior


    Profil pro
    Inscrit en
    Mai 2003
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 3 240
    Points : 11 101
    Points
    11 101
    Par défaut
    Je te conseille grandement d'utiliser l'API JODA-TIME. Elle est bien meilleure pour ce genre d'exercice (calcul des intervalles de temps)

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

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