didoux95
Messages postés845Date d'inscriptionmardi 25 avril 2006StatutMembreDernière intervention 1 août 2017
-
4 oct. 2006 à 20:39
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023
-
7 oct. 2006 à 16:10
Bonjour a tous.
Voila, il faudrais que je soustrais deux date qui sont au format "yyyy MM dd hh:mm:ss". j'ai chercher un peut partous sur le net et sur les forums mais aucune reponses ne me permette de soustraire deux date (Date1 - Date2 avec Date1<Date2).
merci.
Ar0z
Messages postés44Date d'inscriptionlundi 23 janvier 2006StatutMembreDernière intervention12 août 2007 5 oct. 2006 à 19:21
En fait,j'ai l'impression que soustraire deux dates peut poser probleme si tu souhaite exprimer les années et mois. en effet, si tu as une difference de 35 jours, est-ce 1 mois et 5 jours ou 1mois et 4 jours ? Le nombre de jours en 1 mois est fonction de ta position dans le calendrier. tu peux toujours exprimer les résultats depuis le 1er janvier de l'an 0 à minuit ou de l'an 1970 mais ton résultat sera inexploitable dans l'absolu.
En revanche tu peux toujours exprimer la difference en jours, heures, minutes et secondes :
String date1="2006 08 13 11:05:15";
String date2="2006 06 12 12:05:05";
SimpleDateFormat SDF = new SimpleDateFormat("yyyy MM dd HH:mm:ss");
try{
long resultat = (SDF.parse(date1)).getTime()-(SDF.parse(date2)).getTime();
System.out.println(resultat/86400000+" jours"+(resultat%86400000)/3600000+":"+((resultat%86400000)%3600000)/60000+":"+(((resultat%86400000)%3600000)%60000)/1000);
}catch(java.lang.Exception e){
}
Sinon comme te l'a dit twinuts, fouine un peu Sunland, tu devrais y trouver des réponses.
Voilà, en esperant qu'on a quand même pu t'aider un peu ;)
Ar0z
Messages postés44Date d'inscriptionlundi 23 janvier 2006StatutMembreDernière intervention12 août 2007 5 oct. 2006 à 05:36
Bonjour,
Tes deux dates sont des chaines de caracteres exactement au format "yyyy MM dd hh:mm:ss" ?
Si c'est le cas tu pourrais faire (soient date1 et date2 tes deux strings contenant les dates) :
(import java.util.Calendar et java.lang.Integer)
Calendar cDate1 = Calendar.getInstance();
Calendar cDate2 = Calendar.getInstance();
cDate1.clear();
cDate2.clear();
cDate1.set((new Integer(date1.substring(0,4))).intValue(),
(new Integer(date1.substring(5,7))).intValue(),
(new Integer(date1.substring(8,10))).intValue(),
(new Integer(date1.substring(13,15))).intValue(),
(new Integer(date1.substring(16,18))).intValue(),
(new Integer(date1.substring(19,21))).intValue());
cDate2.set((new Integer(date2.substring(0,4))).intValue(),
(new Integer(date2.substring(5,7))).intValue(),
(new Integer(date2.substring(8,10))).intValue(),
(new Integer(date2.substring(13,15))).intValue(),
(new Integer(date2.substring(16,18))).intValue(),
(new Integer(date2.substring(19,21))).intValue());
long resultat = cDate1.getTimeInMillis()-cDate2.getTimeInMillis();
Voilà, tu obtient la difference entre tes deux dates en millisecondes dans resultat. Tu peux ensuite recréer un Calendar ou un Date à partir de ce chiffre.
Bon ok, c'est surement pas la meilleure solution mais c'est tout ce que j'ai en tête là maintenant pour soustraire deux dates qui étaient sous forme de chaines de caractères ^^
didoux95
Messages postés845Date d'inscriptionmardi 25 avril 2006StatutMembreDernière intervention 1 août 20172 5 oct. 2006 à 08:20
bonjour.
j'ai tester vos codes (Ombitious_Developper et Ar0z), mais pour le dernier code de ArOz, il y a deux erreures:
voila comment est ce que j'ai repris votre bout de code:
" Date date1=new Date("2006 10 05 20:00:00");
Date date2=new Date("2006 10 05 20:15:00");
SimpleDateFormat SDF = new SimpleDateFormat("yyyy MM dd HH:mm:ss");
long resultat = (SDF.parse(date1)).getTime()-(SDF.parse(date2)).getTime();
System.out.println("Il y a comme ecart :"+resultat);"
mais voila les erreurs que le compilateur m'indique:
"F:\UseTime.java:10: cannot find symbol
symbol : method parse(java.util.Date)
location: class java.text.SimpleDateFormat
long resultat = (SDF.parse(date1)).getTime()-(SDF.parse(date2)).getTime();
^
F:\UseTime.java:10: cannot find symbol
symbol : method parse(java.util.Date)
location: class java.text.SimpleDateFormat
long resultat = (SDF.parse(date1)).getTime()-(SDF.parse(date2)).getTime();
^
Note: F:\UseTime.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details."
didoux95
Messages postés845Date d'inscriptionmardi 25 avril 2006StatutMembreDernière intervention 1 août 20172 5 oct. 2006 à 17:00
merci.
il n'y a desormais plus d'erreurs de compilation mais en revanche le temps renvoyer est "-900000".
ce temps est-il en ms, sec, min, h, jour, mois, ...
je ne comprend pas, le programme ne devrais t-il pas revoiyer 0000 00 00 00:15:00 ?
Comment remedier a ce pb?
Ar0z
Messages postés44Date d'inscriptionlundi 23 janvier 2006StatutMembreDernière intervention12 août 2007 5 oct. 2006 à 17:51
Oups, j'avais oublié ^^
Les Dates et Calendars expriments le temps en nombre de millisecondes écoulées depuis le 1er janvier 1970 à minuit (la date EPOCH, sorte de JC pour les ordinateurs ^^).
Tu peux y soustraire le temps correspondant en millisecondes pour retrouver un résultat cohérent (ouais, je sais bourrin et pas terrible^^) ou faire ta soustraction non pas par les temps en millisencondes mais champs par champs.
didoux95
Messages postés845Date d'inscriptionmardi 25 avril 2006StatutMembreDernière intervention 1 août 20172 5 oct. 2006 à 17:59
je vais peut etre passer pour un gas trop difficile mais y encore un pb:
(en gardant les meme valeur que precedement "2006 10 05 20:(15/00):00"), j'obtien:
"2/11/31 0:10:0" ce quoi est en rouge est correct mais pas le reste.
Ar0z
Messages postés44Date d'inscriptionlundi 23 janvier 2006StatutMembreDernière intervention12 août 2007 5 oct. 2006 à 18:30
euh là je ne sais pas trop, à part soustraire au champs time l'équivalent en millisecondes de l'écart que tu obtiens (ce qui n'est pas pratique), je ne vois pas.
Par contre, tu pourrais utiliser la méthode de ombitious_developper, je ne comprends pas tres bien le résultat que tu obtiens avec mais si çà marche tu n'aurais pas ce probleme de 1970 ans d'écart.
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 5 oct. 2006 à 18:59
Sa lut,
[auteurdetail.aspx?ID=757549 didoux95] regarde mieux dans la javadoc tu y trouveras les réponses que tu veux et également sur le forum de sun il y à éxactement la réponse à ton prob maintenant si l'anglais te fais peur il est jamais trop tard pour ty mettre serieusement....
------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."