Differenz zwischen zwei Daten mit Uhrzeit in Java berechnen?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

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.


HitsLikeZocker 
Fragesteller
 22.07.2020, 15:44

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."?

0
daCypher  22.07.2020, 16:03
@HitsLikeZocker

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();
		}
	}
0
HitsLikeZocker 
Fragesteller
 22.07.2020, 17:34
@daCypher

Wenn ich das so versuche kommt dieser fehler java.text.ParseException: Unparseable date: "Mon Jun 22 17:33:05 CEST 2020"

0
daCypher  27.07.2020, 08:25
@HitsLikeZocker

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.

0
HitsLikeZocker 
Fragesteller
 28.07.2020, 01:44
@daCypher

Das Problem habe ich bereits gelöst aber trotzdem danke dir :D

0

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.

Woher ich das weiß:Berufserfahrung – Freiberuflicher Java Entwickler mit 10 Jahren Erfahrung

HitsLikeZocker 
Fragesteller
 22.07.2020, 15:09

daraus werde ich irgendwie nicht schlau :c https://www.baeldung.com/java-date-difference

0
Xearox  22.07.2020, 15:11
@HitsLikeZocker

Was genau ist denn da dein Problem? Da gibt es nicht nur eine Variante, wie man es macht.

1
HitsLikeZocker 
Fragesteller
 22.07.2020, 15:14
@Xearox

Wie man die Millisekunden wieder in Jahr, Monat,Tag, Stunde, Minute und Sekunde umrechnen soll wenn man die Millisekunden hat ist mein problem

0