2009-12-07 5 views
1

Quel est le moyen efficace de trouver si une date est 5 jours plus tôt qu'un autre jour? Ai-je besoin d'analyser les deux jours en utilisant un SimpleDateFormat particulier avant de comparer?Trouver la différence de date

+0

5 jours civils? 5 jours ouvrables? –

Répondre

-1
days = (date2.getTime() - date1.getTime())/86400000L 
+2

C'est peut-être le plus efficace, mais cela ne tient pas compte de l'heure d'été. – BalusC

+1

-1 Cela est faux à moins que les instances de date aient été dérivées des heures UTC. – sleske

1

plus rapidement, mais moins avec précision, vous pourriez mettre à la fois dans un java.util.Date, getTime() sur les deux, et diviser la différence par le nombre de millisecondes en un jour .

Vous pouvez le rendre un peu plus précis en créant deux objets Calendrier et travailler avec ceux-ci.

Si vous voulez vraiment résoudre ce problème, et passez un bon moment, regardez Joda Time.

12

La meilleure API de date Java est Joda Time. Il rend ces tâches, et d'autres, beaucoup plus facile que d'utiliser l'API standard.

1

L'interface Calendar a quelques bonnes méthodes, y compris before, after et equals.

+0

L'API entière est cependant assez épique échouer: http://stackoverflow.com/questions/1697215/what-is-your-favourite-java-api-annoyance/1697229#1697229 Voir par exemple l'exemple de calendrier et l'exemple de jodatime dans ce sujet: http://stackoverflow.com/questions/567659/calculate-elapsed-time-in-java-groovy/1776721#1776721 – BalusC

0
Date date1 = // whatever 
Date date2 = // whatever 

Long fiveDaysInMilliseconds = 1000 * 60 * 60 * 24 * 5  
boolean moreThan5Days = Math.abs(date1.getTime() - date2.getTime()) > fiveDaysInMilliseconds 
+2

Vous ne pouvez pas simplement dire 'date1 - date2'. –

+0

Merci, j'ai oublié les appels à 'getTime()' - J'ai récemment travaillé avec Groovy qui surcharge l'opérateur '-' pour que vous puissiez dire 'date1 - date2' –

0

Vous pouvez faire

Long DAY_IN_MILLIS = 86400000; 

if((dateA - dateB) > DAY_IN_MILLIS * 5) { 
    // dateA is more than 5 days older than dateB 
} 
-1

jours = (date2.getTime() - date1.getTime())

+1

Ceci n'est pas correct depuis java.util.Date. getTime() renvoie le nombre de millisecondes. Donc cette différence donne le nombre de millisecondes entre date1 et date2. – wheleph

0

Si vous devez ignorer le temps des dates, vous peut faire quelque chose comme

public static boolean compare5days(Date date, Date another) { 
     Calendar cal = Calendar.getInstance(); 
     cal.setTime(another); 
     cal.add(Calendar.DATE, -5); 

     // clear time 
     cal.set(Calendar.HOUR_OF_DAY, 0); 
     cal.set(Calendar.MINUTE, 0); 
     cal.set(Calendar.SECOND, 0); 
     cal.set(Calendar.MILLISECOND, 0); 

     return date.before(cal.getTime()); 
    }