IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

JodaTime : nombre de nuit entre deux dates


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de dgouyette
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 75
    Par défaut 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 : 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

  2. #2
    Membre expérimenté Avatar de erictoguem
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 150
    Par défaut
    je crois que c'est normal, ta fonction daysBetweeen retourne le nombre de jours intercalés entre les deux dates

  3. #3
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 328
    Par défaut
    Bonjour,

    Je me trompe peut-être mais nous sommes, entre ces 2 dates, dans la période de passage à l´heure dété (le 29 mars à 2 heures AM). Ne serait-ce pas la cause de l'erreur?

    Ne serait-il pas interéssant de faire un 1er test sur une période dont la date fin est le 28 mars, et un autre sur une période dont la date début est le 30 mars ?

    D'autre part attention :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dateStart.setHours(20);
            dateStart.setMinutes(20);
    sont DEPRECATED.

    Cordialement,

    Dan

  4. #4
    Membre éclairé Avatar de dgouyette
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 75
    Par défaut
    @danimo Merci, je vais vérifier pour l'histoire du décalage, même si je ne vois pas trop comment corriger ce problème.

    Je vais essayer de fixer l'heure un peu plus tard.
    Quand au deprecated, je le sais bien... Les manipulations de date de java

  5. #5
    Membre éclairé Avatar de dgouyette
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 75
    Par défaut
    Le problème est résolu en supprimant les utilisations de date au profit de jodaTime.

    Je me taterais à nouveau avant de réutiliser l'objet date en java.
    Merci pour l'info.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MS-DOS] Compter les nombres de jours entre deux dates diffé
    Par Furius dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 19/02/2006, 13h33
  2. nombre de jours entre deux date
    Par mzt.insat dans le forum Langage
    Réponses: 13
    Dernier message: 01/02/2006, 10h34
  3. [Dates] Nombre jours ouvrés entre deux dates
    Par Yali dans le forum Langage
    Réponses: 4
    Dernier message: 28/12/2005, 12h05
  4. Comptage du nombre de Samedi entre deux date
    Par lito74 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 08/12/2005, 19h01
  5. [Dates] Nombre de jours entre deux dates
    Par cmoiscrat dans le forum Langage
    Réponses: 3
    Dernier message: 22/09/2005, 15h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo