JodaTime : nombre de nuit entre deux dates
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:
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:
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