[java] Une colle avec Calendar

Résolu/Fermé
Utilisateur anonyme - 1 mars 2008 à 04:26
 Utilisateur anonyme - 2 mars 2008 à 11:44
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...
A voir également:

2 réponses

reltak Messages postés 261 Date d'inscription mercredi 22 août 2007 Statut Membre Dernière intervention 14 janvier 2012 41
1 mars 2008 à 12:02
Salut

Tout simplement parce qu'elles ne le sont pas! Tous les multiples de 100 qui ne sont pas des multiples de 400 ne sont pas des années bissextiles ;)

1900 est divisible par 100 et pas par 400 donc n'est pas bissextile ;)

https://fr.wikipedia.org/wiki/Ann%C3%A9e_bissextile

Reltak.
1
Utilisateur anonyme
2 mars 2008 à 11:44
salut
et un grand merci !
0