D) Differenz zweier Daten

Dieser Ausschnitt zeigt Ihnen, wie Sie die Differenz zwischen zwei Daten (Datum) in Tagen, Stunden, Minuten, Sekunden und Millisekunden berechnen können.

Hierzu ist es zuerst notwendig zwei unterschiedliche Daten durch die Klasse java.util.GregorianCalendar zu definieren.

Natürlich können Sie auch die veraltete Klasse java.util.Date verwenden. Bei der Verwendung von Date bekommen Sie allerdings Probleme mit Daten vor dem 01.01.1970.

GregorianCalendar today = new GregorianCalendar();
GregorianCalendar past = new GregorianCalendar(1987, 11, 14);

Anschließend berechnen Sie die Differenz beider Daten in Millisekunden, indem Sie die Millisekunden mit den entsprechenden Methoden ermitteln und voneinander subtrahieren.

long difference = today.getTimeInMillis() - past.getTimeInMillis();

Mit ein bisschen mathematischen Kenntnissen ist es möglich die Tage zu berechnen. Wir wissen, dass ein Tag 24 Stunden hat, eine Stunde 60 Minuten, eine Minute 60 Sekunden und eine Sekunde 1000 Millisekunden. Um die Anzahl der Tage zu erhalten müssen wir also die Millisekunden durch 1000 teilen um die Sekunden zu erhalten, anschließend durch 60 für die Minuten, diese wiederum durch 60 für die Stunden und die Stunden letztendlich durch 24 für die Tage. Als Datentyp verwenden wir einen int. Dieser hat den Vorteil, dass Nachkommastellen abgeschnitten werden, welche wir nicht benötigen, da wir nur die ganzen Tage berechnen wollen.

int days = (int)(difference / (1000 * 60 * 60 * 24));

Die Berechnung der Stunden ist einen Tick komplizierter. Um die Millisekunden in Stunden umzuwandeln muss natürlich durch 1000 (Sekunden) , 60 (Minuten) und nochmals 60 (Stunden) geteilt werden. Als Ergebnis erhalten Sie die Differenz der beiden Daten in ganzen Stunden.

int hours = (int)(difference / (1000 * 60 * 60));

Gesucht sind aber die Stunden, die abzüglich der gesamten Tage noch übrig bleiben. Hierzu bedienen Wir uns am Modulo-Operator, der den Rest der Division durch 24 (um die Tage zu erhalten) zurück gibt. Schon haben wir die Anzahl der fehlenden Stunden ermittelt.

int hours = (int)(difference / (1000 * 60 * 60) % 24);

Für die Minuten, Sekunden und Millisekunden ist das Vorgehen natürlich ähnlich:

int minutes = (int)(difference / (1000 * 60) % 60);
int seconds = (int)(difference / 1000 % 60);
int millis = (int)(difference % 1000);

Zum Schluss geben wir noch das Ergebnis aus:

System.out.println("Difference: " + 
  days + " days, " +
  hours + " hours, " +
  minutes + " minutes, " +
  seconds + " seconds and " +
  millis + " milliseonds");

Zusammenfassung:

package de.test;

import java.util.GregorianCalendar;

public class DateDif {

  public static void main(String[] args) {
		
    GregorianCalendar today = new GregorianCalendar();
    GregorianCalendar past = new GregorianCalendar(1987, 11, 14);
    printDifference(today, past);
  }
	
  private static void printDifference(GregorianCalendar today, GregorianCalendar past) {
		
    long difference = today.getTimeInMillis() - past.getTimeInMillis();
    int days = (int)(difference / (1000 * 60 * 60 * 24));
    int hours = (int)(difference / (1000 * 60 * 60) % 24);
    int minutes = (int)(difference / (1000 * 60) % 60);
    int seconds = (int)(difference / 1000 % 60);
    int millis = (int)(difference % 1000);
    System.out.println("Difference: " + 
      days + " days, " +
      hours + " hours, " +
      minutes + " minutes, " +
      seconds + " seconds and " +
      millis + " milliseonds");
  }
}

Sommerzeit

Bitte beachten Sie die Sommerzeit! Wegen der Zeitumstellung in bestimmten Regionen erzeugt folgender Aufruf

GregorianCalendar today = new GregorianCalendar(2008, 11, 14);
GregorianCalendar past = new GregorianCalendar(1987, 11, 14);
printDifference(today, past);

die Ausgabe

Difference: 7671 days, 0 hours, 0 minutes, 0 seconds and 0 milliseonds

Und der Aufruf

GregorianCalendar today = new GregorianCalendar(2008, 7, 14);
GregorianCalendar past = new GregorianCalendar(1987, 11, 14);
printDifference(today, past);

die Ausgabe

Difference: 7548 days, 23 hours, 0 minutes, 0 seconds and 0 milliseonds

3 Replies to “D) Differenz zweier Daten”

  1. Johannes

    Ich kann hier nur wärmstens die Apache Commons empfehlen…
    siehe org.apache.commons.lang.time.DateUtils

  2. Stefan Kiesel

    Die Apache-Commons sind natürlich eine sehr gute und umfangreiche Erweiterung für jedes Programm. Auch ich kann die Verwendung dieser Tools nur empfehlen.

    Allerdings braucht man auf der anderen Seite nicht für jede Kleinigkeit gleich ein rießiges „Erweiterungspaket“ 😉 .

Schreibe einen Kommentar

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.