Une colle avec Calendar

Résolu
Utilisateur anonyme - 1 mars 2008 à 04:32
 Utilisateur anonyme - 1 mars 2008 à 23:19
Bonjour,


Quelqu'un peut-il me dire pourquoi a partir de l'annee 1900 et avec les annees multiples de 1900 qui devraient etre
reconnues comme bissextiles, GregorianCalendar ne les considere pas ainsi ?


Exemples :    1896 oui
                   1900 non
                   3796 oui
                   3800 non
                   etc...


avec   GregorianCalendar gcal = new GregorianCalendar(1896, 1, 29);
         boolean b = gcal.isLeapYear(lannee);
b =true
avec   GregorianCalendar gcal = new GregorianCalendar(1900, 1, 29);
         boolean b = gcal.isLeapYear(lannee); b false (avec -1900 b true !!!)


Meme chose avec 3796 et 3800 et les autres multiples de 1900 (je n'ai bien entendu pas tout teste !)


Avec le controle de validite d'une date (setLenient(false)) c'est pareil:


            int p1 =1896,p2 = 1, p3 = 29;
            gcal = new GregorianCalendar(p1, p2, p3);
            gcal.setLenient(false);
pas d'exception,


            int p1 =1900,p2 = 1, p3 = 29;
            gcal = new GregorianCalendar(p1, p2, p3);
            gcal.setLenient(false);
exception,


etc...


et logiquement, sans controle, puisque GregorianCalendar ne reconnait pas 1900, 3800 etc.. comme bissextiles,
nous obtenons pour 1900 la date du 1er mars 1900, avec 3800 le 1er mars 3800 ...


Est-ce une "exception" a la regle ou un "bug", ou encore ma version java (1.4) qu'il serait temps de changer (ce que j'envisage de faire) ?


Et il ne vaut mieux pas que je parle de getTime() qui, sans controle avec les annees 0,-4,-8 ... retourne respectivement 29 02 1, 29 02 5, 29 02 9...(naturellement pas sous cette forme) et avec controle une exception sur l'annee.


Si vous pouviez vous pencher sur cette colle et m'en parler, ca me ferait plaisir.


Merci d'avoir accepte de me lire surtout que ce n'est en fait pas un grave probleme pour nos applis actuelles, 3800 c'est loin et 1900 c'est du passe, quant aux annees avant JC...



...\ Dan /...

2 réponses

cs_Kysic Messages postés 332 Date d'inscription mardi 12 juillet 2005 Statut Membre Dernière intervention 17 juillet 2010
1 mars 2008 à 18:06
En fait ce n'est pas un problème de GregorianCalendar, mais la définition des années bissectiles.
En fait les années bissectiles sont déjà là pour compenser le décalage entre une année normale en la rotation de la Terre autour du soleil, seulement ce décalage n'est pas exact non plus, du coup certaine année divisible par 4 ne sont pas bissectiles.
Plus d'info:
http://www.afapl.asso.fr/nv32_3.htm

http://kysicurl.free.fr/
3
Utilisateur anonyme
1 mars 2008 à 23:19
Un grand merci a Kysic !

...\ Dan /...
0
Rejoignez-nous