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 :
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();
 
	}
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
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);
 
	}
J'ai certainement du faire un grossière erreur, mais ce sont les plus difficiles à trouver. Merci de votre avis