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 :

Calculer la différence entre deux dates


Sujet :

avec Java

  1. #1
    Futur Membre du Club
    Femme Profil pro
    developpeur
    Inscrit en
    Septembre 2017
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : Algérie

    Informations professionnelles :
    Activité : developpeur

    Informations forums :
    Inscription : Septembre 2017
    Messages : 19
    Points : 5
    Points
    5
    Par défaut Calculer la différence entre deux dates
    Bonjour,
    Je dois calculer la difference en jours entre deux dates, ces dates sont saisies dans les jTextField de mon formulaire
    Est ce que quelqu'un peut me dire comment faire?

  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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Un JTextField étant fait pour saisir une chaîne, il va te falloir convertir la chaîne en date, ce qui implique que la saisie respecte un format précis (ou plusieurs éventuellement, en essayant de convertir avec différents formats). Il y a d'autres types de composants qui te permettront de saisir directement un date (comme un JSpinner avec un SpinnerDateModel, ou des composants externes, comme JCalendar de Toedter).

    Pour convertir une chaîne provenant d'une JTextField en date, donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DateTimeFormatter format = DateTimeFormatter.ofPattern("dd/MM/yyyy"); // format jour / mois / année
    LocalDate date1 = LocalDate.parse(jtextfield1.getText(), format);
    LocalDate date2 = LocalDate.parse(jtextfield2.getText(), format);
    Pour faire la différence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Period period = Period.between(date1, date2);
     
    System.out.println(period.getDays()+" jour(s)");
    System.out.println(period.getMonths()+" mois");
    System.out.println(period.getYears()+" année(s)");

    Si tes dates contiennent des heures, minutes, secondes... il faudra utiliser un LocalDateTime au lieu d'un LocalDate et un format adapté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DateTimeFormatter format = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss");
    LocalDateTime date1 = LocalDateTime.parse(jtextfield1.getText(), format);
    LocalDateTime date2 = LocalDateTime.parse(jtextfield2.getText(), format);
    Et pour la différence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Duration duration = Duration.between(date1, date2);
     
    System.out.println(duration.getSeconds()+" seconde(s)");
    Si tu as besoin de la différence dans une unité, par exemple, en jours (cela fonctionne aussi bien pour LocalDate que pour LocalDateTime) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println(ChronoUnit.DAYS.between(date1, date2)+" jour(s)");
    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
    Femme Profil pro
    developpeur
    Inscrit en
    Septembre 2017
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : Algérie

    Informations professionnelles :
    Activité : developpeur

    Informations forums :
    Inscription : Septembre 2017
    Messages : 19
    Points : 5
    Points
    5
    Par défaut
    Bonsoir,
    J'ai essaye le code que vous m'avez passé mais il me donne ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.time.forma.DateTimeParseException:Text "2017/09/09"could not be parsed at index 4
    sachant que cette date est recuperée de la base de donne et j'ai a faire une difference entre cette date et une autre qui est sur mon formulaire.

  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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par coucouS Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.time.forma.DateTimeParseException:Text "2017/09/09"could not be parsed at index 4
    Forcément, comme je te l'ai indiqué, l'exemple était pour le format jour/mois/année : ..."dd/MM/yyyy"); // format jour / mois / année. Voir la documentation pour adapter le format (ou un peu d'observation...).

    Citation Envoyé par coucouS Voir le message
    sachant que cette date est recuperée de la base de donne et j'ai a faire une difference entre cette date et une autre qui est sur mon formulaire.
    Si la date est récupérée depuis une base de données, en théorie, la date est stockée en type date, donc pas besoin de la parser. En revanche, tu vas récupérer un java.sql.Date, pas un LocalDate. Donc il faudra convertir l'un ou l'autre (le plus simple de java.sql.Date vers LocalDate, pour pouvoir faire la différence). Voir tutoriel pour savoir comment on fait (toLocalDate(java.sql.Date)).
    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
    Femme Profil pro
    developpeur
    Inscrit en
    Septembre 2017
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : Algérie

    Informations professionnelles :
    Activité : developpeur

    Informations forums :
    Inscription : Septembre 2017
    Messages : 19
    Points : 5
    Points
    5
    Par défaut
    voici mon code, je n'arrive pas a voir l'erreur!!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
                 String sql="select Dat_recrut from employe where Id_emp='"+badge.getText()+"'";
     
                 p=connect.connecterDB().createStatement();
                 res=p.executeQuery(sql);
                 while(res.next()){
                     String datrecrut=res.getString(1);
                     System.out.println(datrecrut);
                 DateTimeFormatter format=DateTimeFormatter.ofPattern("yyyy/MM/dd");
                 LocalDate d1=LocalDate.parse(datrecrut,format);
                 LocalDate d2=LocalDate.parse(date.getText(),format);
                 Period period=Period.between(d2,d1);
                 int joursolde=period.getDays();
                 System.out.println(joursolde);

  6. #6
    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
    Ta date viens d'une DB, pas besoin de passer par une String pour en refaire une date. Utilise directement getDate(1)

  7. #7
    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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Je ne peux pas mieux la voir que toi. S'il y a une erreur, il faut me donner l'intitullé.

    Est-ce que tu es sure que la date est stockée en "String" dans la base (parce que c'est une mauvaise pratique : pas de possibilité de trier, filtrer par comparaison, afficher dans un format localisé, etc.). Et la date est bien une date, alors pour la récupérer c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.sql.Date datrecrut=res.getDate(1);
    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.

  8. #8
    Futur Membre du Club
    Femme Profil pro
    developpeur
    Inscrit en
    Septembre 2017
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : Algérie

    Informations professionnelles :
    Activité : developpeur

    Informations forums :
    Inscription : Septembre 2017
    Messages : 19
    Points : 5
    Points
    5
    Par défaut
    Bonsoir,
    j'ai utilisé ceci pour la date que j'ai recupere de la base de donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    java.sql.Date datrecrut=res.getDate(1);
    LocalDate d1=datrecrut.toLocalDate();
    et ca marche mais pour la date du systeme j'ai utilisé ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     LocalDate d2=LocalDate.parse(date.getText(),format);
    et ca me donne une erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.time.format.DateTimeParseException:Text "2017/09/20" could not be parssed at index 5
    sachant que la date du systeme je l'ai recupere ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Calendar cal=new GregorianCalendar();
            int month=cal.get(Calendar.MONTH);
            int year=cal.get(Calendar.YEAR);
            int day=cal.get(Calendar.DAY_OF_MONTH);
            date.setText(year+"/"+(month+1)+"/"+day);

  9. #9
    Futur Membre du Club
    Femme Profil pro
    developpeur
    Inscrit en
    Septembre 2017
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : Algérie

    Informations professionnelles :
    Activité : developpeur

    Informations forums :
    Inscription : Septembre 2017
    Messages : 19
    Points : 5
    Points
    5
    Par défaut
    j'ai utilisé ceci pour la date que j'ai récupéré de la BDD:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    java.sql.Date datrecrut=res.getDate(1);
    LocalDate d1=datrecrut.toLocalDate();
    et ca me donne pas d'erreurs mais pour la date du systeme que j'ai récupéré ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Calendar cal=new GregorianCalendar();
            int month=cal.get(Calendar.MONTH);
            int year=cal.get(Calendar.YEAR);
            int day=cal.get(Calendar.DAY_OF_MONTH);
            date.setText(year+"/"+(month+1)+"/"+day);
    ca me donne cette erreure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.time.format.DateTimeParseException:Text"2017/09/20" could not be parssed at index 5
    Ou est le probleme svp?

  10. #10
    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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par coucouS Voir le message
    mais pour la date du systeme que j'ai récupéré ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Calendar cal=new GregorianCalendar();
            int month=cal.get(Calendar.MONTH);
            int year=cal.get(Calendar.YEAR);
            int day=cal.get(Calendar.DAY_OF_MONTH);
            date.setText(year+"/"+(month+1)+"/"+day);
    Utilise plutôt LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy/MM/dd")) ou DateTimeFormatter.ofPattern("yyyy/MM/dd").format(LocalDate.now()).


    Citation Envoyé par coucouS Voir le message
    ca me donne cette erreure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.time.format.DateTimeParseException:Text"2017/09/20" could not be parssed at index 5
    Avec quel code pour parser le texte ?
    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.

Discussions similaires

  1. [AC-2007] calculer la différence entre deux dates en minutes
    Par sarah12 dans le forum IHM
    Réponses: 5
    Dernier message: 20/07/2010, 15h44
  2. Calculer une différence entre deux dates
    Par attif0709 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 27/04/2010, 12h06
  3. [AC-2003] Calcul de différence entre deux dates : problème de format
    Par sinifroth dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 22/01/2010, 15h35
  4. Calcul de différence entre deux dates cas vaut 0
    Par zanoubya dans le forum Débuter
    Réponses: 3
    Dernier message: 25/12/2008, 19h45
  5. Calculer la différence entre deux dates
    Par drthodt dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 18/12/2007, 08h27

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