Differenz zwischen zwei Daten mit Uhrzeit in Java berechnen?
Ich wollte mal fragen, ob hier jemand eine einfache Möglichkeit kennt die Differenz zwischen zwei Daten z.B. 19.05.2018 20:15 und 26.07.2020 15:30 in Jahren, Monaten, Tagen, Stunden, Minuten und Sekunden zu berechnen
LG Daniel
PS: danke schonmal für die Antworten :)
2 Antworten
Doch schwieriger als gedacht. In Excel braucht man nur Datum und Uhrzeit eintragen und beides voneinander abziehen.
public static void main(String[] args) {
SimpleDateFormat dfGerman = new SimpleDateFormat("dd.MM.yyyy HH:mm");
try {
Date startDate = dfGerman.parse("19.05.2018 20:15");
Date endDate = dfGerman.parse("26.07.2020 15:30");
Date resultDate = new Date(endDate.getTime() - startDate.getTime() + dfGerman.parse("01.01.0000 00:00").getTime());
System.out.println(dfGerman.format(resultDate));
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Das Ergebnis wird wieder als Datum ausgegeben. Also in diesem Fall 09.03.0002 19:15. Das heißt dann zwei Jahre, drei Monate, Neun Tage, 19 Stunden und 15 Minuten.
Einfach das Datum in ein Calendar-Objekt einfügen und die Felder einzeln auslesen.
public static void main(String[] args) {
SimpleDateFormat dfGerman = new SimpleDateFormat("dd.MM.yyyy HH:mm");
try {
Date startDate = dfGerman.parse("19.05.2018 20:15");
Date endDate = dfGerman.parse("26.07.2020 15:30");
Date resultDate = new Date(endDate.getTime() - startDate.getTime());
Calendar resultCalendar = Calendar.getInstance();
resultCalendar.setTime(resultDate);
System.out.println((resultCalendar.get(Calendar.YEAR)-1970) + " Jahre, " + resultCalendar.get(Calendar.MONTH) + " Monate, " + (resultCalendar.get(Calendar.DAY_OF_MONTH)-1) + " Tage, " + (resultCalendar.get(Calendar.HOUR_OF_DAY)-1) + " Stunden und " + resultCalendar.get(Calendar.MINUTE) + " Minuten.");
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Wenn ich das so versuche kommt dieser fehler java.text.ParseException: Unparseable date: "Mon Jun 22 17:33:05 CEST 2020"
Du hast ja auch gefragt, wie man z.B. "22.07.2020 17:33:05" mit einem anderen Datum vergleichen kann und nicht "Mon Jun 22 17:33:05 CEST 2020".
Hast du irgendwo versucht, das aktuelle Datum in einen String umzuwandeln und den dann mit der Funktion zu verarbeiten? Wenn du irgendwo die aktuelle Zeit liest (Wahrscheinlich mit Date date = new Date(System.CurrentTimeMillis());) dann übergib den Wert als Date und nicht als String.
Das Problem habe ich bereits gelöst aber trotzdem danke dir :D
Von beiden die Unix Zeit in ms nehmen, von der größeren die kleinere Abziehen und dann das Ergebnis entsprechend wieder umwandeln.
Oder du nimmst einfach eine Library dafür.
Alles weitere findest du hier: https://www.baeldung.com/java-date-difference
Ich habe mir dafür einfach eine eigene kleine Funktion geschrieben.
daraus werde ich irgendwie nicht schlau :c https://www.baeldung.com/java-date-difference
Was genau ist denn da dein Problem? Da gibt es nicht nur eine Variante, wie man es macht.
Wie man die Millisekunden wieder in Jahr, Monat,Tag, Stunde, Minute und Sekunde umrechnen soll wenn man die Millisekunden hat ist mein problem
https://www.geeksforgeeks.org/program-to-convert-milliseconds-to-a-date-format-in-java/ wird das hier nicht wieder in ein Datum umgewandelt? oder sehe ich das falsch?
Ich habe dir hier nochmal was rausgesucht ... Eigentlich solltest du Google ja auch verwenden können :D
https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/TimeUnit.html
Die TimeUnit Lib nutze ich eigentlich nur.
Also zu erst rechnest du die Diff aus und dann kannst du TimeUnit verwenden.
Wie gesagt, das sind alles Möglichkeiten, wie du das machen kannst.
Du kennst nicht dann auch zufälligerweise eine Möglichkeit das Datum dann auch so anzuzeigen, oder "Das heißt dann zwei Jahre, drei Monate, Neun Tage, 19 Stunden und 15 Minuten."?