Bonjour,
Ma question est la suivante : comment récupérer le temps (au format HH:mm:ss) entre deux dates ?
Par exemple :
- D1 : 2009/01/13 14:30:00
- D2 : 2009/01/12 02:00:00
Alors D1 - D2 nous donnerait 36:30:00
Est-ce possible ?
Merci d'avance.
Version imprimable
Bonjour,
Ma question est la suivante : comment récupérer le temps (au format HH:mm:ss) entre deux dates ?
Par exemple :
- D1 : 2009/01/13 14:30:00
- D2 : 2009/01/12 02:00:00
Alors D1 - D2 nous donnerait 36:30:00
Est-ce possible ?
Merci d'avance.
Bonjour, c'est un sujet souvent traité sur le forum.
Il suffit de récupérer le nombre de millisecondes entre les 2 dates (Date.getTime()), et ensuite une simple division par le nombre de millisecondes/heure pour avoir le nombre d'heures. Ensuite, utilise le reste pour avoir le nombre de minutes.
A noter que Java 7 va introduire une nouvelle API de date, avec la notion d'intervalle et de période. Celle-ce sera fortement inspirée de Joda Time, qui est déjà utilisable.
Par contre, pour ton besoin, jaymz, c'est peut-être un peu lourd...
j'arrive à récupérer le nombre d'heures, mais pour les minutes comment faire svp?
Code:
1
2
3
4
5
6 Date d1 = stringToDate("13-01-2009 14:45:00", "dd-MM-yyyy HH:mm:ss"); Date d2 = stringToDate("12-01-2009 02:00:00", "dd-MM-yyyy HH:mm:ss"); Date d3 = new Date(d1.getTime() - d2.getTime()); System.out.println("Hours : " + d3.getTime()/1000/60/60);
Pourquoi passes-tu par un objet Date ? Les millisecondes suffisent.
Pour les heures, tu as fais une division entière, pour les minutes tu récupères le reste, par un soustraction ou par un modulo (%).
Voila la syntaxe du modulo, ensuite tu devrais trouver ;)
Code:reste = nombre1 % nombre2
Ouais ayé c'est bon :)
Le boulet je vous jure :lol:
Sinon, p'tite question avant de mettre en Résolu : est-ce que c'est sûr à 100% de faire ce calcul soi-même ? Les objets comme Calendar ne permettent pas d'obtenir ce genre de résultat ?
Oui c'est sûr à 100%, c'est une simple soustraction et une division.
Ben en fait, tout dépend de ce que tu appelle le nombre d'heures entre 2 dates. La tu aura le nombre d'heures on va dire physique, celle réellement ressenties par les personnes. Mais t'aura pas le nombre d'heure "calendrier" qui tiens compte des décalages dus aux heures d'hiver. Par exemple, dans ton cas, si tu fait la différence entre le 1er janvier 2009 à 11h05 et les 1er juillet 2009 à 11h05, t'aura pas un multiple de 24 heures, il va y avoir un décalage d'une heure.
De manière générale, pour comparer des dates (ou plutôt heures), il faut utiliser l'heure UTC.
Ok, merci pour vos réponses.
Je mets en "Résolu".
Rajoutons qu'il existe l'enum java.util.concurrent.TimeUnit depuis Java 1.5 qui permet de convertir automatiquement (plus besoin de se casser la tête avec des divisions et autres)
Dans ce cas-ci, il aurait fallu l'utiliser comme ceci :
Code:
1
2
3
4
5
6
7
8
9
10
11
12 Date d1 = stringToDate("13-01-2009 14:45:00", "dd-MM-yyyy HH:mm:ss"); Date d2 = stringToDate("12-01-2009 02:00:00", "dd-MM-yyyy HH:mm:ss"); long intervalle = d1.getTime() - d2.getTime(); System.out.println("Hours : " + TimeUnit.HOURS.convert(intervalle, TimeUnit.MILLISECONDS)); System.out.println("Minutes : " + TimeUnit.MINUTES.convert(intervalle, TimeUnit.MILLISECONDS)); // ou System.out.println("Hours : " + TimeUnit.MILLISECONDS.toHours(intervalle)); System.out.println("Minutes : " + TimeUnit.MILLISECONDS.toMinutes(intervalle));
Merci dingoth, j'essaie de suite ;)