2012-10-23 18 views
19

Mögliche Duplizieren:
Calculating the Difference Between Two Java Date Instancessubtrahieren zwei Daten in Java

Ich weiß, könnte dies ein doppelter Faden sein. Aber ich versuche einen Weg zu finden, den Unterschied zwischen zwei Daten zu berechnen. Ab jQuery ist die Datumszeichenfolge im Format 'yyyy-mm-dd'. Ich lese diese als String und konvertiert Java-Datum wie diese

Date d1 = new SimpleDateFormat("yyyy-M-dd").parse((String) request.getParameter(date1)); 
Date d2 = new SimpleDateFormat("yyyy-M-dd").parse((String) request.getParameter(date2)); 

ich den Unterschied in der Anzahl der Tage zwischen diesen beiden Daten berechnen möchten.

Hinweis: Ich kann keine APIs von Drittanbietern verwenden, da diese überprüft werden müssen.

+0

Sie sicher ist es mm anstelle von MM? – Jimmy

+0

Welcher Unterschied? Je nach Lokalität usw. gibt es mehrere Definitionen. Werfen Sie einen Blick auf die verschiedenen Zeit-APIs von Drittanbietern, um zu sehen, wohin ich mit diesem Kommentar gehe. –

+1

Wenn Sie denken, dass es ein dup ist, warum suchen Sie nicht danach? Es ist nicht so, als ob der andere Thread nicht gefunden werden könnte ... –

Antwort

18
long diff = Math.abs(d1.getTime() - d2.getTime()); 
long diffDays = diff/(24 * 60 * 60 * 1000); 
+3

Dies wird an der Sommerzeitgrenze des Frühlings scheitern. Beispiel (mit Ihrem Code), 'd1 = neues Datum (112, 3-1, 11, 0, 0, 0)', 'd2 = neues Datum (112, 3-1, 12, 0, 0, 0)' , ergibt '0'. –

+1

Die Antwort liefert ein abgeschnittenes Ergebnis. Für ein rundes Ergebnis: long diffDays = (diff + 12 * 60 * 60 * 1000)/(24 * 60 * 60 * 1000) –

+0

@SteveKuo, ich weiß, das war vor einer Weile, aber haben Sie eine bessere Lösung, die doesn nicht für die Sommerzeit? Ich versuche nicht, snarky zu sein, ich arbeite selbst an einem ähnlichen Thema und würde Code mit offensichtlichen Fehlern lieber vermeiden. –

-2

Unter der Annahme, dass Sie mit Date eingeschränkt sind, können Sie wie folgt vorgehen:

Date diff = new Date(d2.getTime() - d1.getTime());

Hier sind die Unterschiede in Millisekunden seit Beginn der „Epoche“ Berechnung und ein neues Date-Objekt erstellt in einem Offset von der Epoche. Wie andere gesagt haben: Die Antworten in der Duplikatsfrage sind wahrscheinlich bessere Alternativen (wenn Sie nicht an Date gebunden sind).

+0

Tage wurden nach –

+0

gefragt Bitte lesen Sie die Frage erneut sorgfältig. Ihre Antwort beantwortet die ursprüngliche Frage ** nicht **. – DavidPostill

-1
Date d1 = new SimpleDateFormat("yyyy-M-dd").parse((String) request. 
      getParameter(date1)); 
Date d2 = new SimpleDateFormat("yyyy-M-dd").parse((String) request. 
      getParameter(date2)); 

long diff = d2.getTime() - d1.getTime(); 

System.out.println("Difference between " + d1 + " and "+ d2+" is " 
     + (diff/(1000 * 60 * 60 * 24)) + " days."); 
+1

Scheitert über den Beginn der Grenze für Sommerzeit. Beispiel, d1 = "2012-3-11" und d2 = "2012-3-12" ergibt 0 Tage. –