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
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
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/
Une discussion résolue.
A+.
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); }
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Date d1 = new Date();
=> Les lignes
ne sont pas bien claires. Remplacer par :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 String NBjour=Long.toString(nbDaysDate1-nbDaysDate2); return Integer.parseInt(NBjour);
- 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.
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;
N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
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
- Ç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
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
Le 1er aout, et ça vous sort ce résultat:
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"));;
127
128
128
129
Le plus simple est d'utiliser l'api jodatime qui contient ce genre de calcul correctement implémenté!
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager