Bonjour,
J'ai un programme chargé de compter le nombre de nuits entre deux dates.
Ce programme fonctionne normalement depuis un moment, mais on vient de me remonter que entre le 21/03/2009 et le 02/04/2009, le programme me retourne 11 nuits au lieu de 12. Dans mon test unitaire, le code ne fonctionne pas pour les dates du 2009/03/21 au 2009/03/31
Voici le code :
Le test unitaire permettant de reproduire le problème :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 /** * Calcule via l'api jodaTime le nombre de jour entre deux dates * @param dateStart * @param dateFin * @return Nombre de nuits entre deux dates */ public int calculNbNuitsEntre(Date dateStart, Date dateFin) { dateStart.setHours(20); dateStart.setMinutes(20); dateFin.setHours(20); dateFin.setMinutes(20); ReadableInstant a=new Instant(dateStart); ReadableInstant b=new Instant(dateFin); Days d = Days.daysBetween(a, b); logger.debug("calculNbNuitsEntre [dateStart: "+dateStart+"], [dateFin: "+dateFin+"] : "+d.getDays()); return d.getDays(); }
J'ai certainement du faire un grossière erreur, mais ce sont les plus difficiles à trouver. Merci de votre avis
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 @Test // Bug remonté en mars 2009 // samedi 21/03/2009 au jeudi 02/04/2009 public void testBug() { Date dateDebut = new Date("2009/03/21"); Date dateFin = new Date("2009/03/22"); int nbNuit = tarifService.calculNbNuitsEntre(dateDebut, dateFin); Assert.assertEquals(1, nbNuit); dateDebut = new Date("2009/12/21"); dateFin = new Date("2009/12/31"); nbNuit = tarifService.calculNbNuitsEntre(dateDebut, dateFin); Assert.assertEquals(10, nbNuit); dateDebut = new Date("2009/03/21"); dateFin = new Date("2009/03/31"); nbNuit = tarifService.calculNbNuitsEntre(dateDebut, dateFin); Assert.assertEquals(10, nbNuit); }
Partager