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 :

Liste de dates entre deux dates


Sujet :

Collection et Stream Java

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 37
    Points : 10
    Points
    10
    Par défaut Liste de dates entre deux dates
    Bonjour à tous !

    Je dois écrire une fonction java, seul problème je ne connais pas ce langage, donc ce que j'ai essayé de bidouiller ne marche pas

    Je cherche a faire une fonction qui prend en paramètre 2 dates et qui me retourne une chaine qui contient une liste (sur une seule ligne, séparée par des des dates qui sont entre les 2 dates.

    Exemple :

    DateA : 24/09/2012
    DateB : 28/09/2012

    Résultat attendu : 24/09/2012;25/09/2012;26/09/2012;27/09/2012

    Alors.. j'ai fais ça, mais je pense que j'ai pas combien compris le fonctionnement du calendarGregorien là

    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
    public static String listeDesDates (Date DateDebut, Date DateFin)
    	{
     
     
    		GregorianCalendar cal = new GregorianCalendar();
    		cal.setTime(DateDebut);
    		String listeDates ="";
     
     
    		while (cal.before(DateFin))
    		{
    		listeDates = listeDates+cal.getTime()+";";
    		cal.add(GregorianCalendar.DATE,1);
     
     
     
    		}	
    		//supprimer le dernier caractère (;)
    		return listeDates;
    	}
    Problème : ma fonction retourne toujours une chaine vide
    Merci beaucoup par avance

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 073
    Points : 7 977
    Points
    7 977
    Par défaut
    Bah ca fonctionne bien en fait ?!

    Mais j'imagine que ton problème se situe dans le format de la date qui t'es retourné sous la forme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Mon Sep 24 18:20:50 CEST 2012;Tue Sep 25 18:20:50 CEST 2012;Wed Sep 26 18:20:50 CEST 2012;Thu Sep 27 18:20:50 CEST 2012;Fri Sep 28 18:20:50 CEST 2012;
    au lieu du

    24/09/2006;25/09/2006; etc

    Il faut donc formatter la date avec par exemple http://docs.oracle.com/javase/1.4.2/...ateFormat.html
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 37
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par wax78 Voir le message
    Bah ca fonctionne bien en fait ?!

    Mais j'imagine que ton problème se situe dans le format de la date qui t'es retourné sous la forme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Mon Sep 24 18:20:50 CEST 2012;Tue Sep 25 18:20:50 CEST 2012;Wed Sep 26 18:20:50 CEST 2012;Thu Sep 27 18:20:50 CEST 2012;Fri Sep 28 18:20:50 CEST 2012;
    au lieu du

    24/09/2006;25/09/2006; etc

    Il faut donc formatter la date avec par exemple http://docs.oracle.com/javase/1.4.2/...ateFormat.html
    Ah oui pardon j'aurais du préciser : mon problème c'est que ma fonction retourne toujours une chaine vide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while (cal.before(DateFin))
    		{
    		listeDates = listeDates+cal.getTime()+";";
    		cal.add(GregorianCalendar.DATE,1);
    Ce que je veux faire ici : comparer ma date A à ma date B, si la A est plus petite que la B alors j'ajoute un jour à ma date A et je mets la valeur de la date A dans la variable listeDates, suivie d'un point virgule.

    while cal.before(DateFin) ça me donne bien un tant que dateDebut < DateFin ?

    Merci

  4. #4
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 073
    Points : 7 977
    Points
    7 977
    Par défaut
    hoho, bah c'est bizarre, ici ce petit code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    GregorianCalendar DateDebut = new GregorianCalendar();
    		GregorianCalendar DateFin = new GregorianCalendar();
    		DateFin.add(GregorianCalendar.DATE,5);
    		GregorianCalendar cal = new GregorianCalendar();
    		cal.setTime(DateDebut.getTime());
    		String listeDates ="";
    		while (cal.before(DateFin))
    		{
    			listeDates = listeDates+cal.getTime()+";";
    			cal.add(GregorianCalendar.DATE,1);
    		};
     		System.err.println(""+listeDates);
    Fonctionne bien, ca reponds même a ta dernière question en théorie

    Est-tu sure de passer des bonnes dates a ta fonction ?
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 37
    Points : 10
    Points
    10
    Par défaut
    Je pourrais vérifier mes dates en paramètre que demain, mais je crois bien qu'elles sont au format jj/mm/yyyy hh:mm et qu'il n'y a pas de soucis avec, je check ça demain matin

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    281
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 281
    Points : 321
    Points
    321
    Par défaut
    Je pense que tu dois confondre datefin et datedebut lorsque les paramètre sont rentrée.

  7. #7
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 37
    Points : 10
    Points
    10
    Par défaut
    J'aimerais bien que ça soit ça ! Je crois pas mais je vous dis demain !

    Merci en tout cas

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    281
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 281
    Points : 321
    Points
    321
    Par défaut
    A ta place j'essayerai de debugguer en plaçant des System.out.println() dans ta boucle pour connaitre l'état de tes variables à chaque tour de boucle. Tu pourras déjà mieux cerner le problème.

  9. #9
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Calendar.before() prend en paramètre un autre Calendar, pas un Date.

  10. #10
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 073
    Points : 7 977
    Points
    7 977
    Par défaut
    D'ou voila pourquoi ca fonctionnait dans mon exemple probablement.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 37
    Points : 10
    Points
    10
    Par défaut
    J'ai fais les modifs suivantes :

    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
    public static String listeDesDates (Date DateDebut, Date DateFin)
    	{
     
     
    		GregorianCalendar caldeb = new GregorianCalendar();
    		caldeb.setTime(DateDebut);
    		GregorianCalendar calfin = new GregorianCalendar();
    		calfin.setTime(DateFin);
    		String listeDates ="";
     
     
    		while (caldeb.before(calfin))
    		{
    		listeDates = listeDates+caldeb.getTime()+";";
    		caldeb.add(GregorianCalendar.DATE,1);
     
     
     
    		}	
    		//supprimer le dernier caractère (;)
    		return listeDates;
    	}
    Et ça marche !!

    Bon ça me renvoie :

    Sat Sep 29 00:00:00 CEST 2012;Sun Sep 30 00:00:00 CEST 2012;

    Mais ça ressemble à ce que disait wax78 dans son premier post, je me penche là dessus je vous dis si j'y arrive pas

    Merci beaucoup !

  12. #12
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 37
    Points : 10
    Points
    10
    Par défaut
    J'ai pas bien compris comment ça fonctionne, j'ai rajouté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    //Le format dd/MM/yyyy est appliqué aux deux dates en entrée
    		SimpleDateFormat sdf;
    		sdf = new SimpleDateFormat();
    		sdf.applyPattern("dd/MM/yyyy");
    		sdf.format(DateDebut);
            sdf.format(DateFin);
    Mais je sais pas quoi changer dans mon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    GregorianCalendar caldeb = new GregorianCalendar();
    		caldeb.setTime(DateDebut);
    		GregorianCalendar calfin = new GregorianCalendar();
    		calfin.setTime(DateFin);
    Je pensais que le code que j'avais rajouté avait changé le format de mes variables mais en fait non ça marche pas comme ça

  13. #13
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 073
    Points : 7 977
    Points
    7 977
    Par défaut
    Non en effet, toi tu voudrais changer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    listeDates = listeDates+caldeb.getTime()+";";
    et non le reste vu que c'est ta sortie...

    il faut formatter caldeb.getTime()
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  14. #14
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 37
    Points : 10
    Points
    10
    Par défaut
    Ah oui... merci !

    J'ai fais ça mais ça ne change toujours pas le format

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    //Le format dd/MM/yyyy est appliqué aux dates de début
    		SimpleDateFormat sdf;
    		sdf = new SimpleDateFormat();
    		sdf.applyPattern("dd/MM/yyyy");
    		sdf.format(caldeb.getTime() );
     
    	    //Tant que la date de début est inférieure à la date de fin, on met la DateDebut dans la liste suivie d'un ';'
    		//Et on ajoute un jour à la date début
    		while (caldeb.before(calfin))
    		{
    		listeDates = listeDates+caldeb.getTime()+";";
    		caldeb.add(GregorianCalendar.DATE,1);
    		}

  15. #15
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    format() retourne une String, ce n'est pas pour rien

  16. #16
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 37
    Points : 10
    Points
    10
    Par défaut
    J'ai modifié dans ma boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while (caldeb.before(calfin))
    		{
    		listeDates = listeDates+sdf.format(caldeb.getTime() )+";";
    		caldeb.add(GregorianCalendar.DATE,1);
    		}

    Et c'est ooook !! Merci beaucoup

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

Discussions similaires

  1. Liste des jours entre deux dates
    Par rvzip64 dans le forum Requêtes
    Réponses: 12
    Dernier message: 01/09/2015, 16h00
  2. fonction table pour récupérer la liste des jours entre deux dates
    Par elmoul7ak dans le forum Développement
    Réponses: 2
    Dernier message: 01/05/2010, 13h22
  3. [AC-2003] obternir la liste des dates entre deux dates
    Par ludman dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 30/03/2010, 21h08
  4. Liste des mois entre deux dates
    Par ginkas31 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 10/03/2008, 16h33
  5. Générer le listing des jours entre deux dates
    Par gsmdu62 dans le forum Langage
    Réponses: 8
    Dernier message: 01/05/2006, 11h08

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