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 :

Différence entre deux dates


Sujet :

Collection et Stream Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2008
    Messages : 39
    Points : 35
    Points
    35
    Par défaut Différence entre deux dates
    Bonjour;
    J'ai un variable date1 de type String qui contient une date Exp:date1="2012/12/10 09:55:47" ;
    je voudrais savoir combien de jours séparent
    cet date et la date d' aujourd'hui
    Merci d'avance pour votre aide

  2. #2
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    Pour récupérer une date avec ton champ de teste là, va faire un tour sur la FAQ. Après, il ne te reste plus qu'à soustraire la date du jour avec ta date nouvellement créée. Puis identifier le nombre de jour.

    Tu peux tout simplement faire une soustraction avec la méthode getTime() si tu veux une solution simple.

    PS : En tout cas, à mon avis, le net doit regorger de ce genre d'exemple.
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  3. #3
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Une discussion résolue.

    A+.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2008
    Messages : 39
    Points : 35
    Points
    35
    Par défaut Calcule nombre jour entre 2 date
    tous d'abord Merci ...
    je résoudre le problème par cet fonction

    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  int calcule_date(String date)  {
        String dateToday=null;
        DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd  HH:mm:ss");
        Date date = new Date();
        dateToday=dateFormat.format(date);//date systeme
        long nbDaysFirstDate=0;
        long nbDaysSecondDate=0;
        Date d1= dateFormat.parse(dateToday);
        Date d2=dateFormat.parse(date);
        long DayInMillisecond=24*60*60*1000;
         nbDaysDate1=d1.getTime()/DayInMillisecond;
         nbDaysDate2=d2.getTime()/DayInMillisecond;
     
       String NBjour=Long.toString(nbDaysDate1-nbDaysDate2);
       return Integer.parseInt(NBjour);     
    }

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Il y a pas mal de problèmes :

    - Ça ne compile pas
    => il y a un paramètre String date et une variable Date date. On ne peut pas avoir des variables ou paramètres de même nom.
    => tu confonds nbDaysFirstDate, nbDaysSecondDate, nbDaysDate1 et nbDaysDate2
    => DateFormat.parse() doit déclarer ParseException, ce que tu ne fais pas.

    - Ça tourne autour du pot
    => Ça ne sert à rien de créer une new Date(), puis la formater, puis la parser. T'as fait un tour pour rien. Tu pouvais faire directement :
    et du coup dateToday ne sert à rien.

    => Les lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String NBjour=Long.toString(nbDaysDate1-nbDaysDate2);
    return Integer.parseInt(NBjour);
    ne sont pas bien claires. Remplacer par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    long nbJours = nbDaysDate1 - nbDaysDate2;
    if(nbJours < Integer.MIN_VALUE || nbJours > Integer.MAX_VALUE) {
      throw new IllegalArgumentException("La différence en jours dépasse la capacité d'un int")
    }
    return (int)nbJours;
    - Bon, sinon il ne tient pas compte des changements d'heure et du fait qu'un jour calendaire ne fait pas forcément 24 heures. Mais c'est peut-être voulu.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre à l'essai
    Inscrit en
    Décembre 2012
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Décembre 2012
    Messages : 16
    Points : 15
    Points
    15
    Par défaut
    Que penses-tu de cette methode?

    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
     
    import java.text.DateFormat;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Date;
    import java.util.GregorianCalendar;
    import java.util.Locale;
     
     
    public final class Utils {
     
    	public static Integer getNumberDaysBetweenFromToday(String dateToCount, String date_formattage){
     
    		Integer nb_days = null;
     
     
    		DateFormat df = new SimpleDateFormat(date_formattage, Locale.FRANCE);
    		Date dateToCountFormatted = null;
    		Date currentDate = null;
     
    		try {
     
    			dateToCountFormatted =  df.parse(dateToCount);
     
    			String currentDateString = df.format(new Date());
    			currentDate = df.parse(currentDateString);
     
    			Calendar gcDateToCount = new GregorianCalendar();
    			gcDateToCount.setTime(dateToCountFormatted);
     
    			Calendar gcToday = new GregorianCalendar();
    			gcToday.setTime(currentDate);
     
     
    			nb_days = (int) ((gcToday.getTime().getTime() - gcDateToCount.getTime().getTime()) / (1000 * 60 * 60 * 24));
     
    		} catch (ParseException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}  
     
    		return nb_days;
     
    	}
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    public class MyMain {
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		System.out.println(Utils.getNumberDaysBetweenFromToday("31/11/2012","dd/MM/yyyy"));
    		System.out.println(Utils.getNumberDaysBetweenFromToday("20/12/2011","dd/MM/yyyy"));
    		System.out.println(Utils.getNumberDaysBetweenFromToday("12/12/2012","dd/MM/yyyy"));
    	}
     
    }

    Resultat dans la console :
    19
    366
    8


    Pour ton cas le :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    System.out.println(Utils.getNumberDaysBetweenFromToday("2012/12/10 09:55:47","yyyy/MM/dd HH:mm:ss"));

    Resultat dans la console :
    10



  7. #7
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par gueekAddict Voir le message
    Que penses-tu de cette methode?
    - Ça continue de tourner autour du pot
    => À nouveau cette idée bizarre de créer une Date, puis la formater, puis la parser. Là ça a au moins l'avantage de tronquer sur une date calendaire, en virant les heures, minutes, secondes et millisecondes. Mais il faudrait que ce soit plus clair, genre en le mettant dans une méthode Date truncateOnCalendarDay(Date date). Ou alors en faisant autrement.
    Et puis bon, est-ce que c'est voulu, au fait, de tronquer sur des dates calendaires ? On en sait rien.

    => L'utilisation de Calendar n'a servi à rien, mais du tout. Il serait pas là que ça serait pareil.

    - La ParseException ne doit pas être catchée, mais remontée à l'appelant. On ne renvoie pas null s'il y a une erreur.

    - D'ailleurs l'emploi d'un Integer au lieu d'un int est douteux.

    - Toujours pas de gestion des changements d'heure lors du calcul de la différence. Ce qui du coup devient dommage puisqu'on vient de tronquer sur des jours calendaires, qui, eux, gèrent les changements d'heure.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    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
    En partant sur cette méthode, vous allez avoir de sale surprise lors du passage hiver / été. Ce code assume que chaque journée fat 24 heure et chaque minute 60 secondes. Ce n'est pas vrai partout.

    Avec ce code, lorsque l'on perd une heure, vous perdez une journée si vous vous trouvez actuellement en été.


    Lancez ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            System.out.println(Utils.getNumberDaysBetweenFromToday("27/03/2012","dd/MM/yyyy"));
            System.out.println(Utils.getNumberDaysBetweenFromToday("26/03/2012","dd/MM/yyyy"));
            System.out.println(Utils.getNumberDaysBetweenFromToday("25/03/2012","dd/MM/yyyy"));
            System.out.println(Utils.getNumberDaysBetweenFromToday("24/03/2012","dd/MM/yyyy"));;
    Le 1er aout, et ça vous sort ce résultat:

    127
    128
    128
    129


    Le plus simple est d'utiliser l'api jodatime qui contient ce genre de calcul correctement implémenté!

  9. #9
    Membre à l'essai
    Inscrit en
    Décembre 2012
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Décembre 2012
    Messages : 16
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    En partant sur cette méthode, vous allez avoir de sale surprise lors du passage hiver / été. Ce code assume que chaque journée fat 24 heure et chaque minute 60 secondes. Ce n'est pas vrai partout.

    Avec ce code, lorsque l'on perd une heure, vous perdez une journée si vous vous trouvez actuellement en été.


    Lancez ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            System.out.println(Utils.getNumberDaysBetweenFromToday("27/03/2012","dd/MM/yyyy"));
            System.out.println(Utils.getNumberDaysBetweenFromToday("26/03/2012","dd/MM/yyyy"));
            System.out.println(Utils.getNumberDaysBetweenFromToday("25/03/2012","dd/MM/yyyy"));
            System.out.println(Utils.getNumberDaysBetweenFromToday("24/03/2012","dd/MM/yyyy"));;
    Le 1er aout, et ça vous sort ce résultat:

    127
    128
    128
    129


    Le plus simple est d'utiliser l'api jodatime qui contient ce genre de calcul correctement implémenté!
    Mea culpa

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/07/2006, 14h04
  2. Nombre de minutes de différence entre deux dates
    Par Oberown dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 05/05/2006, 15h41
  3. Différence entre deux dates
    Par Azharis dans le forum Access
    Réponses: 3
    Dernier message: 11/01/2006, 10h58
  4. Différence entre deux dates
    Par pittzz dans le forum Oracle
    Réponses: 5
    Dernier message: 18/07/2005, 12h24
  5. Comment obtenir la différence entre deux dates ?
    Par jbat dans le forum Langage
    Réponses: 4
    Dernier message: 02/06/2005, 09h34

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