2015-10-02 20 views
5

Ich habe versucht, den Unterschied zwischen zwei Daten zu berechnen, und ich bemerkte eine Sache. Wenn nur die Tage berechnet werden, ist der Beginn der Sommerzeit in das Intervall eingeschlossen, so dass das Ergebnis mit 1 Tag kürzer ist.java.util.Date Differenz in Tagen berechnen

Um genaue Ergebnisse zu erhalten, muss auch der Stundenwert berücksichtigt werden.

Zum Beispiel:

SimpleDateFormat format = new SimpleDateFormat("MM-dd-yyyy"); 
Date dfrom = format.parse("03-29-2015"); 
Date dto = format.parse("03-30-2015"); 
long diff = dto.getTime() - dfrom.getTime(); 
System.out.println(diff); 
System.out.println("Days: "+diff/(24 * 60 * 60 * 1000)); 
System.out.println("Hours: "+diff/(60 * 60 * 1000) % 24); 

Ausgang:

82800000 
Days: 0 
Hours: 23 

Hat jemand eine bessere Lösung?

+3

Können Sie stattdessen java.time (Java 8) oder Joda Time verwenden? Beides wird das Ganze viel einfacher machen. –

+3

Mögliches Duplikat von [Berechnung der Differenz zwischen zwei Java-Datumsinstanzen] (http://stackoverflow.com/questions/1555262/calculating-the-difference-between-two-java-date-instances) – Tom

+2

Die Ursache ist Ihre Annahme in Zeile 6, dass jeder Tag 24 Stunden hat, wenn Sie bereits wissen, dass das Intervall, das Sie messen, einen Tag enthält, der nur 23 Stunden lang ist. –

Antwort

9

Oh ja, eine bessere Lösung gibt es!

Stoppen Sie mit der veralteten java.util.Date Klasse und umarmen Sie die Macht der java.time API in Java 8 und später (tutorial) gebaut. Insbesondere die Klassen DateTimeFormatter, LocalDate und ChronoUnit.

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM-dd-yyyy"); 
LocalDate date1 = LocalDate.parse("03-29-2015", formatter); 
LocalDate date2 = LocalDate.parse("03-30-2015", formatter); 
long days = ChronoUnit.DAYS.between(date1, date2); 
System.out.println(days); // prints 1