2013-02-14 4 views
0

Essayer de faire un petit programme de compte à rebours en Java.Java - Calendrier/Différence de date - Trouver différence en quelques secondes

Je travaille sur la découverte de la différence entre la partie des dates de l'application, et pour une raison quelconque, je reçois seulement les jours.

Je veux les jours, heures, minutes et secondes. Je ne suis pas sûr pourquoi mon calcul est juste arrondi à un entier pair ... 163 dans cet exemple, et pas 163.xx?

Voici mon code:

import java.util.Date; 
import java.util.Calendar; 
import java.util.GregorianCalendar; 

public class CalcData { 

    Calendar cal1; 
    Date today; 

    public CalcData() { 

     cal1 = new GregorianCalendar(); 
     today = new GregorianCalendar().getTime(); 

    } 

    public String calcDiff() { 

     cal1.set(2013, 6, 27, 7, 15, 0); 
     double theDays = calcDays(cal1.getTime(), today); 
     return "" + theDays; 

    } 

    public double calcDays(Date d1, Date d2) { 

     double theCalcDays = (double) ((d1.getTime() - d2.getTime())/(1000 * 60 * 60 * 24)); 
     return theCalcDays; 

    } 
} 

Quand je lance ce, comme je le disais, je reçois le résultat: 163,0

Je pense, si elle utilise millisecondes, que ce serait un peu sorte de décimal. Je suis sûr que c'est quelque chose de simple qui me manque, mais que je ne trouve pas!

Merci d'avance!

Répondre

0

Vous divisez un entier par un autre entier. Vous devez les lancer en double avant de faire la division. Comme ceci

double theCalcDays = ((double) (d1.getTime() - d2.getTime()))/(1000 * 60 * 60 * 24); 
+0

Assez sûr! Merci beaucoup. Je suis content que ce soit une simple erreur. – cbaze19

+0

Cela ne fonctionnera pas, si les deux dates proviennent de différentes zones d'économie de temps. Dans ce cas, la différence de temps sera de X jours-1 et 23 heures :) – Antoniossss

+0

En effet, dans les lieux où l'heure d'été est en vigueur, il y a un jour par an qui dure 23 heures et un jour qui dure 25 heures. Cependant, à l'intérieur de l'objet date est une valeur en UTC. UTC a seulement 24 heures par jour, et donc cela fonctionne. Vous avez toujours ce problème lorsque vous prenez en compte les fuseaux horaires: une conférence téléphonique de deux heures peut commencer et se terminer le même jour dans un fuseau horaire, et elle peut débuter et se terminer plusieurs jours dans un fuseau horaire différent. Ils sont en désaccord sur le nombre de jours! Cela n'a rien à voir avec la durée, mais plutôt l'interprétation de l'heure en fonction de ce fuseau horaire. – AgilePro

Questions connexes