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

Java Discussion :

Dates de plusieurs échéances


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Economiste
    Inscrit en
    Décembre 2016
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Bénin

    Informations professionnelles :
    Activité : Economiste
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2016
    Messages : 114
    Par défaut Dates de plusieurs échéances
    Bonsoir les membres. Je suis en train de développer une application Java me permettant d'établir les échéanciers de paiement d'emprunt. Dans le projet, je souhaite générer des dates de remboursement qui ne prennent pas en compte les week-end. Pour ce fait, j'ai demandé à l'application de me ramener toutes les échéances qui tombent dans un week-end à la date de vendrédi précédant. Pour y parvenir, j'ai programmé le code ci-après:
    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
                           int j=1;
    				for(int i=0; i<Double.parseDouble(nobreEche); i++){
     
     
    				row[0] = a++;
    					Date today = dateDebutEche.getDate();
    					Instant instant = Instant.ofEpochMilli(today.getTime()); 
    					LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault()); 
    					LocalDate date1 = localDateTime.toLocalDate();
    					DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MMM-yyyy");
     
    				       if (date1.getDayOfWeek() == DayOfWeek.SATURDAY||date1.getDayOfWeek() == DayOfWeek.SUNDAY) {
     
    				    	   			LocalDate date2 = date1.plusMonths(j++);
    									TemporalAdjuster nextFriday = TemporalAdjusters.next(DayOfWeek.MONDAY);
    									LocalDate nextFridayDate = date2.with(nextFriday);
     
    									String formattedString = nextFridayDate.format(formatter);
    				row[1]= formattedString ;
    						       }
     
    						    	   		else {
    							    	   		LocalDate date2 = date1.plusMonths(j++);
    							    	   		String formattedString = date2.format(formatter);
    				row[1]= formattedString ;
    						    	   			}
    Cet code me permet d'avoir les dates de paiement selon le nombre d'échéance (qui est mensuel). Le problème est que l'application ne fait que me sortier uniquement les dates de paiement pour les vendrédis même si celles-ci tombe dans les jours ouvrables.
    Veuillez m'aidé pour resoudre ce problème.

  2. #2
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2015
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Décembre 2015
    Messages : 21
    Par défaut
    En espérant que sa t'aide , mais si tu veux plus, il faut donner plus parce que le code que tu as donné n'est pas complet :/


    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 {
     
        private DateUtils(){}
     
     
        public static boolean isInWeekend(LocalDate dateToCompare) {
            if (dateToCompare.getDayOfWeek().equals(DayOfWeek.SATURDAY)
                    || dateToCompare.getDayOfWeek().equals(DayOfWeek.SUNDAY)) {
                return true;
            };
     
            return false;
        }
     
        public static LocalDate goToPreviousFriday(LocalDate dateToCompare) {
     
            if (isInWeekend(dateToCompare)) {
     
                if (dateToCompare.getDayOfWeek().equals(DayOfWeek.SATURDAY)) {
                    return dateToCompare.minusDays(1);
     
                } else if (dateToCompare.getDayOfWeek().equals(DayOfWeek.SUNDAY)) {
     
                    return dateToCompare.minusDays(2);
                }
     
            }
            return null;
        }
     
    }

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    C'est peut-être beaucoup de détours pour pas grand-chose, non ? On obtient le même avec simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public static LocalDate getCorrespondingWorkDay(LocalDate date) {
      switch(date.getDayOfWeek()) {
        case SATURDAY:
          return date.minusDays(1);
        case SUNDAY:
          return date.minusDays(2);
        default:
          return date;
      }
    }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre confirmé
    Homme Profil pro
    Economiste
    Inscrit en
    Décembre 2016
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Bénin

    Informations professionnelles :
    Activité : Economiste
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2016
    Messages : 114
    Par défaut
    Merci pour vos reponses. J'ai vue les propositions que vous m'aviez faites. Mais je n'est pas puis utiliser les fonctions static avec return dans mon Jtable qui aussi est dans une autre fonction. Je vais donc vous donnez l'intégralité du code pour que vous m'aidez pour le parfait.
    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
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    JButton btnEtablirLchance = new JButton("Etablir l'\u00E9ch\u00E9ance");
    		btnEtablirLchance.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent arg0) {
     
     
    				int b=Integer.parseInt(txtNombreEche.getText()); 
    				montantAccorder=txtMontantAccordé.getText();
     
    				nobreEche=txtNombreEche.getText();
    				taux=cmbTaux.getSelectedItem().toString();
     
    				interet=Integer.parseInt(montantAccorder)*Integer.parseInt(taux)/100;//calcul d'interet
     
    				amort=Integer.parseInt(montantAccorder)/Integer.parseInt(nobreEche);
     
    				/*BigDecimal bd = new BigDecimal(amort);//Arrondi
    				bd= bd.setScale(2,BigDecimal.ROUND_DOWN);//arrondi
    				amort = bd.doubleValue();*///arrondi
     
    				mensualite=amort+interet;
    				/*BigDecimal bd1 = new BigDecimal(mensualite);
    				bd1= bd1.setScale(2,BigDecimal.ROUND_DOWN);
    				mensualite = bd1.doubleValue();*/
     
    				interetTotal=interet*Integer.parseInt(nobreEche);
    				epargne=Integer.parseInt(montantAccorder)*10/(Integer.parseInt(nobreEche)*100);
    				/*BigDecimal bd2 = new BigDecimal(epargne);//Arrondi
    				bd2= bd2.setScale(2,BigDecimal.ROUND_DOWN);//arrondi
    				epargne = bd2.doubleValue();//arrondi
    */				echeance=mensualite+epargne;
    				int capitalDegr=(((Integer.parseInt(montantAccorder)/Integer.parseInt(nobreEche))));
    				/*BigDecimal bd3 = new BigDecimal(capitalDegr);//Arrondi
    				bd3= bd3.setScale(2,BigDecimal.ROUND_DOWN);//arrondi
    				capitalDegr = bd3.doubleValue();//arrondi
    */				
     
    				txtAmor.setText(String.valueOf(amort));
    				txtInteret.setText(String.valueOf(interet));
    				txtMensualite.setText(String.valueOf(mensualite));
    				txtTotaInteret.setText(String.valueOf(interetTotal));
    				txtEpargne.setText(String.valueOf(epargne));
    				txtEcheMens.setText(String.valueOf(echeance));
     
     
    				model = new DefaultTableModel();
    				model.setColumnIdentifiers(new Object[]{"N°","Date","Capital","Amortissemnt","Interet",
    														"Mensualite","Epargne","Echeance"});
    				Object[] row = new Object[8];
    				int a=1;
    				int j=1;
    				for(int i=0; i<Double.parseDouble(nobreEche); i++){
     
     
    				row[0] = a++;
    					Date today = dateDebutEche.getDate();
    					Instant instant = Instant.ofEpochMilli(today.getTime()); 
    					LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault()); 
    					LocalDate date1 = localDateTime.toLocalDate();
    					DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MMM-yyyy");
     
    				       if (date1.getDayOfWeek() == DayOfWeek.SATURDAY||date1.getDayOfWeek() == DayOfWeek.SUNDAY) {
     
    				    	   			LocalDate date2 = date1.plusMonths(j++);
    									TemporalAdjuster nextFriday = TemporalAdjusters.next(DayOfWeek.MONDAY);
    									LocalDate nextFridayDate = date2.with(nextFriday);
     
    									String formattedString = nextFridayDate.format(formatter);
    				row[1]= formattedString ;
    						       }
     
    						    	   		else {
    							    	   		LocalDate date2 = date1.plusMonths(j++);
    							    	   		String formattedString = date2.format(formatter);
    				row[1]= formattedString ;
    						    	   			}
     
     
    				row[2] = (b--)*capitalDegr;// calcul du capital restant du
    				row[3] = amort;
    				row[4] = interet;
    				row[5] = mensualite;
    				row[6] = epargne;
    				row[7] = echeance;
     
    ///****************************************************************************/*
     
     
     
    					model.addRow(row);
     
    				}	
     
    				table.setModel(model);
     
    			}
     
    }
    Merci d'avance pour votre aide.

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Ton plus gros problème c'est l'énorme manque d'organisation.

    Ton code contient plein de code commenté que tu aurais dû effacer, et il est énormément trop long. Il ne faut pas faire des blocs de code aussi long. Il faut faire plein de méthodes différentes qui font chacun un travail et un seul, et il faut appeler ces méthodes au lieu de tout faire en un seul endroit incompréhensible. Tu seras toujours bloqué comme ça tant que tu n'apprendras pas à t'organiser.

    Concernant le fait que le résultat produit est erroné :

    - d'abord, toutes tes échéances sont les mêmes, puisqu'à chaque boucle tu recommences du début avec Date today = dateDebutEche.getDate(); et on ne passe jamais au mois prochain.

    - ensuite, dans ton code tu recherches d'abord si date1 est un samedi ou un dimanche, puis si c'est le cas tu prends la date d'un mois plus tard et tu l'alignes sur un vendredi. Ce n'est pas la date d'un mois plus tard que tu veux aligner. C'est celle qui tombe sur un week-end.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre confirmé
    Homme Profil pro
    Economiste
    Inscrit en
    Décembre 2016
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Bénin

    Informations professionnelles :
    Activité : Economiste
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2016
    Messages : 114
    Par défaut
    Merci pour votre fidèle commentaire de mon code. J'en suis conscient. Mais j'ai garder les commentaires par ce que cherche de solution optimal. Je promet me réorganiser. Comment peut-je manipuler ces dates dans ce cas?

  7. #7
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2015
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Décembre 2015
    Messages : 21
    Par défaut
    Citation Envoyé par thelvin Voir le message
    C'est peut-être beaucoup de détours pour pas grand-chose, non ? On obtient le même avec simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public static LocalDate getCorrespondingWorkDay(LocalDate date) {
      switch(date.getDayOfWeek()) {
        case SATURDAY:
          return date.minusDays(1);
        case SUNDAY:
          return date.minusDays(2);
        default:
          return date;
      }
    }
    Effectivement sa fait le café !

  8. #8
    Membre confirmé
    Homme Profil pro
    Economiste
    Inscrit en
    Décembre 2016
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Bénin

    Informations professionnelles :
    Activité : Economiste
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2016
    Messages : 114
    Par défaut
    Bonjour M. thelvin. Comme vous me l'avez recommandez, j'ai réorganisé mon code qui désormais se presente comme suit:
    Pour le calcul des données autres que la date et l'affichage dans le Jtable
    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
    JButton btnEtablirLchance = new JButton("Etablir l'\u00E9ch\u00E9ance");
    		btnEtablirLchance.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent arg0) {
     
    				int b=0; 
    				//Conversion des données en de 
    				capital=Double.parseDouble(txtMontantAccordé.getText());
    				tauxInte=Double.parseDouble(cmbTaux.getSelectedItem().toString());
    				tauxEpargne=Double.parseDouble(comboBox.getSelectedItem().toString());
    				nbrEcheance=Double.parseDouble(txtNombreEche.getText());
    				dateDebut=dateDebutEche.getDate();
     
    				//les différents calcul sur les données
    				amorti=capital/nbrEcheance;
    				inte=capital*tauxInte/100;
    				mens=amorti+inte;
    				epar=capital*tauxEpargne/(100*nbrEcheance);
    				eche=mens+epar;
    				interetTotal=inte*nbrEcheance;
     
     
    				model = new DefaultTableModel();
    				model.setColumnIdentifiers(new Object[]{"N°","Date","Capital","Amortissemnt","Interet",
    														   "Mensualite","Epargne","Echeance"});
     
    				Object[] row = new Object[8];
    				int a=1;
    				int j=1;
    				for(int i=0; i<nbrEcheance; i++){
     
     
    				row[0] = a++;
     
    				DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy");
    				String formattedString = DateEcheance(date).format(formatter);
    				row[1]= formattedString;
    				row[2] = capital-(amorti*b++) ;
    				row[3] = amorti;
    				row[4] = inte;
    				row[5] = mens;
    				row[6] = epar;
    				row[7] = eche;
     
    				model.addRow(row);
     
    				}	
     
    				table.setModel(model);
     
    			}
     
     
    		});
    Pour la date j'ai crée une nouvel méthode avec le code que vous m'avez donnée.

    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
    public static  LocalDate DateEcheance(LocalDate date) {
     
    		Instant instant = Instant.ofEpochMilli(dateDebutEche.getDate().getTime()); 
    		LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault()); 
    		LocalDate dateintial = localDateTime.toLocalDate();
     
    				date = dateintial.plusMonths(1) ;
     
    		switch(date.getDayOfWeek()) {
    		    case SATURDAY:
    		      return date.minusDays(1);
    		    case SUNDAY:
    		      return date.minusDays(2);
    		    default:
    		      return date;
    		  }
    		}
    Actualement le problème est que pour toutes les lignes l'application m'affiche qu'une même date. Alors que je souhaite qu'à chaque ligne qu'il ajoute un mois par rapport à la ligne précédante.
    Veuillez bien m'aidé pour trouver un code pourra resoudre ce problème.
    Merci.

  9. #9
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Le problème c'est que dans cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String formattedString = DateEcheance(date).format(formatter);
    tu utilises toujours la variable date, mais tu ne modifies jamais cette variable, après un calcul d'échéance, pour qu'elle contienne le mois qui suit là où elle était.
    ... Enfin pour des calculs d'échéance, il vaut mieux retenir la toute première date et y ajouter le nombre de mois voulus pour chaque échéance, sinon on décale tout le temps.

    Toujours est-il que tu dois te débrouiller pour ajouter les mois à ta date de départ, au lieu de toujours utiliser ta date de départ.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. selectionner plusieures dates pour plusieures personnes
    Par davidengalere dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 27/06/2007, 12h05
  2. [Requêtes] Selectionner une seule date parmis plusieurs
    Par Herman dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 28/03/2007, 15h01
  3. [MySQL] UNE date pour plusieurs dates et UN évènement pour plusieurs évènements...
    Par Aliosha dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 19/03/2007, 21h58
  4. [Dates] Enregistrer plusieurs dates
    Par bfabrice dans le forum Langage
    Réponses: 7
    Dernier message: 17/05/2006, 10h57
  5. [VBA-E]Recherche de date dans plusieurs feuilles
    Par atypik dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 05/04/2006, 20h36

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