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

avec Java Discussion :

Besoin d'aide Java Gestion des Dates


Sujet :

avec Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2018
    Messages : 3
    Par défaut Besoin d'aide Java Gestion des Dates
    Salut ..
    je suis entrain de travailler sur un projet java et j'ai un problème au niveau des gestion des dates.
    je dois obtenir deux dates choisies par JDateChooser et déterminer les durées en mois entre eux.
    par exemple :
    dateDébut : 16/01/2018
    DateFin : 02/04/2018
    le résultat doit etre :
    16/01/2018
    31/01/2018
    28/02/2018
    31/03/2018
    02/04/2018
    Merci d'avance pour votre aid

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Citation Envoyé par Mryagami Voir le message
    [...]déterminer les durées en mois entre eux.[...]
    le résultat doit etre :
    16/01/2018
    31/01/2018
    28/02/2018
    31/03/2018
    02/04/2018
    Ce n'est pas vraiment les durées en mois ça, c'est la liste des derniers jours des mois compris entre les deux dates, avec les deux dates au début et à la fin.


    Citation Envoyé par Mryagami Voir le message
    Salut ..
    je dois obtenir deux dates choisies par JDateChooser et déterminer les durées en mois entre eux.
    Comme ça n'est pas un composant standard et qu'il y a plein de bibliothèques de composants du genre, il aurait été utile de préciser laquelle.

    Par ailleurs, tu ne précises pas ce qui te bloque dans la réalisation...

    En tout cas il y a 2 aspects dans ton problème :

    1. Récupérer les dates saisies
      Ceci dépend de la bibliothèque utilisée et tout doit être indiqué dans sa doc pour le faire.
    2. Déterminer la liste de jours que tu indiques
      A priori, à moins d'utiliser une bibliothèque très récente, tu vas récupérer des dates sous forme d'instances de java.util.Date. Ces classes ne sont pas vraiment pratiques, que ça soit pour déterminer la liste des derniers jours des mois, ou pour calculer la durée en mois. La classe java.time.LocalDate est beaucoup plus pratique. Pour s'en sortir, il suffit de faire une conversion java.util.Date vers java.time.LocalDate. Ensuite, on peut facilement obtenir le dernier jour d'un mois en prenant le jour précédent le premier jour du mois suivant, avec les méthodes plusMonth et minusDay de java.time.LocalDate. Ensuite, on fait une boucle de mois en mois tant qu'on n'est avant la date de fin pour avoir les derniers jours de chaque mois. Il suffit de convertir la liste obtenue en liste de java.util.Date si on veut retravailler avec des java.util.Date.
    3. Pour les conversions, voici les helpers :
      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
      26
      27
      28
      29
      30
      31
      32
       
      public class DateUtils {
       
              /**
                * Conversion d'un java.time.LocalDate en java.util.Date
                */
      	public static Date convert(LocalDate date) {
      		return Date.from(date.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
      	}
       
              /**
                * Conversion d'un java.util.Date en java.time.LocalDate 
                */
      	public static LocalDate convert(Date date) {
      		return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
      	}
       
              /**
                * Conversion d'une collection de java.time.LocalDate en liste de java.util.Date 
                */
      	public static List<Date> toDateList(Collection<LocalDate> dates) {
      		return dates.stream().map(DateUtils::convert).collect(Collectors.toList());
      	}
       
              /**
                * Conversion d'une collection de java.util.Date en liste de java.time.LocalDate 
                */
      	public static List<LocalDate> toLocalDateList(Collection<Date> dates) {
      		return dates.stream().map(DateUtils::convert).collect(Collectors.toList());
      	}
       
      }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2018
    Messages : 3
    Par défaut
    salut et merci bcq pour votre réponse .
    je travaille avec java.util.Calendar ;
    import java.util.Date ;
    le but comme vous avez dite est de récupérer des dates début et fin partir des JDateChooser et déterminer les derniers jours des mois compris entre ces deux dates.

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Mryagami Voir le message
    je travaille avec java.util.Calendar ;
    import java.util.Date ;
    Oublie Calendar. Convertis comme je te l'ai dit tes java.util.Date en java.time.LocalDate :
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.time.LocalDate;
    import java.time.ZoneId;
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.Date;
    import java.util.List;
    import java.util.stream.Collectors;
     
    public class DateUtils {
     
    	public static LocalDate getFirstDayOfMonth(LocalDate date) {
    		return LocalDate.of(date.getYear(), date.getMonth(), 1);
    	}
     
    	public static LocalDate getLastDayOfMonth(LocalDate date) {
    		return getFirstDayOfMonth(date).plusMonths(1).minusDays(1);
    	}
     
    	public static List<Date> getListOfLastDaysOfMonth(Date start, Date end, boolean includeBounds) {
    		return toDateList(getListOfLastDaysOfMonth(convert(start), convert(end), includeBounds));
    	}
     
    	/**
             * Liste des derniers jours des mois compris entre la date de début et la date de fin incluse
             * @param start date de début
             * @param end date de fin
             * @param includeBounds vrai si on veut les dates de début et de fin dans la liste
             * @return
             */
    	public static List<LocalDate> getListOfLastDaysOfMonth(LocalDate start, LocalDate end, boolean includeBounds) {
    		if ( end.isBefore(start) ) throw new IllegalArgumentException();
    		List<LocalDate> dates = new ArrayList<>();
    		LocalDate date = getLastDayOfMonth(start); // dernier jour du mois de la date de départ
    		if ( includeBounds && !date.equals(start) ) { // // si la date de départ n'est pas le dernier jour de mois et qu'on doit la mettre dans la liste, on la met
    			dates.add(start);
    		}
     
    		while(date.isBefore(end)) { // tant que la date est avant la date de fin
    			dates.add(date);
    			date = getLastDayOfMonth(date.plusDays(1)); // on avance d'un mois
    		}
     
    		if ( date.equals(end) ) { // si la date de fin est un dernier jour de mois, on l'intègre
    			dates.add(date);
    		}
    		else if ( includeBounds ) { // sinon, on l'intègre si demandé
    			dates.add(end);
    		}
    		return dates;
    	}
     
    	public static Date convert(LocalDate date) {
    		return Date.from(date.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
    	}
     
    	public static LocalDate convert(Date date) {
    		return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
    	}
     
    	public static List<Date> toDateList(Collection<LocalDate> dates) {
    		return dates.stream().map(DateUtils::convert).collect(Collectors.toList());
    	}
     
    	public static List<LocalDate> toLocalDateList(Collection<Date> dates) {
    		return dates.stream().map(DateUtils::convert).collect(Collectors.toList());
    	}
     
    	public static void main(String[] args) throws ParseException {
     
    		SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
    		Date dateDebut = format.parse("16/01/2018");
    		Date dateFin = format.parse("02/04/2018");
     
    		List<Date> dates = DateUtils.getListOfLastDaysOfMonth(dateDebut, dateFin, true);
     
    		System.out.println(getLastDayOfMonth(convert(dateDebut)));
     
    		System.out.println("Date de début : " + format.format(dateDebut));
    		System.out.println("Date de fin : " + format.format(dateFin));
    		System.out.println("le résultat doit etre : ");
    		dates.stream().map(format::format).forEach(System.out::println);
    	}
     
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2018
    Messages : 3
    Par défaut
    Salut...
    Je tiens a vous remercie infiniment Monsieur....
    C bon le code ça marche très bien..

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

Discussions similaires

  1. Aide/Conception requête SQl dans Business Object/Gestion des dates
    Par sylvain_O dans le forum SAP Business Objects
    Réponses: 0
    Dernier message: 01/07/2017, 13h53
  2. Réponses: 7
    Dernier message: 05/09/2006, 08h56
  3. Besoin d'aide : afficher / cacher des layers
    Par mickeliette dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 21/10/2004, 11h03
  4. Réponses: 3
    Dernier message: 13/08/2004, 18h52
  5. [MCD] [MCD] Gestion des dates
    Par brionne dans le forum Schéma
    Réponses: 3
    Dernier message: 30/05/2003, 13h01

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