Java Zeitdifferenz zwischen 2 Daten

kelox

Ensign
Registriert
Juli 2009
Beiträge
235
Hallo,

ich möchte die Differenz zwischen 2 Daten berechnen, ungefähr so:

12.06.2011 18:03:12
14.06.2011 17:56:23

Differenz: 1 Tag 23 Stunden 53 Minuten

Das ganze sollte noch Sonderfälle wie Sommer-/Winterzeit Umstellung berücksichtigen. Habe schon gegoogled und einige Frameworks gefunden (JodaTime), aber irgendwie bekomme ich es nicht hin, da man bei solchen Frameworks immer nur ein Teil der Differenz zurück bekommen kann (Minuten ODER Stunden). Jemand eine Idee? Komme eigentlich eher aus der C# Ecke, da geht das einfach über die Klasse "TimeSpan".
 
Ja, sogar die Ur-Version von C# ist Java um Jahre voraus. Wenn es dir wirklich nur um die Differenz geht, so sollte es reichen, die Methode getTime() der beiden Daten aufzurufen und die Werte zu subtrahieren. Bedenken solltest du jedoch, dass sowohl die Date als auch die GregorianCalendar Klasse in Java ab der Linux-Epoche rechnet - du bist also mit Daten in der Vergangenheit ziemlich eingeschränkt.
 
Bietet die Java "Calendar" Klasse nicht auch die Möglichkeit dazu? Hat zumindest mehr Funktionalität als "Date"...
 
@CoolHandLuke: Ja...den "Trick" ließt man überall: differenzMillis / 1000 / 60 / 60 etc.. aber das berücksichtigt halt Sommer-/Winterzeit Umstellung nicht.

lmgtfy....ja schön, toll...und welche der Ergebnisse die schon Lila markiert sind soll ich nehmen? -.-. Habe sogar extra schon geschrieben das ich gegoogled habe, mit sogar noch weit aus mehr Termen als das. Das einzige was man da sieht, ist, dass dieses Thema unter java der Horror ist. Zum vergleich C#:

PHP:
TimeSpan span = end.Subtract(now);
System.Console.WriteLine(span.Days + " Tage - " + span.Hours + ":" + span.Minutes);

Gibt es sowas einfaches auch unter Java?
 
kelox schrieb:
@CoolHandLuke: Ja...den "Trick" ließt man überall: differenzMillis / 1000 / 60 / 60 etc.. aber das berücksichtigt halt Sommer-/Winterzeit Umstellung nicht
Doch sollte es - zumindest wenn immerhin getDate() richtig funktioniert und die Umwandlung von Sommer/Winterzeit, Zeitzone, etc. berücksichtigt.
 
Sironardo schrieb:
Bietet die Java "Calendar" Klasse nicht auch die Möglichkeit dazu? Hat zumindest mehr Funktionalität als "Date"...

Bei Calendar kann man über "add" mit negativen Werten "Substrahieren". Das Ergebnis ist aber ein Datum und keine Zeitspanne.
 
also ich hab das mal probiert:

PHP:
               Calendar cal = Calendar.getInstance();
                cal.set(Calendar.DATE, 0);
                cal.set(Calendar.MONTH, 3);
                cal.set(Calendar.YEAR, 2011);
                cal.set(Calendar.HOUR, 12);

                Date d1 = cal.getTime();
                cal.set(Calendar.MONTH, 4);
                Date d2 = cal.getTime();

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

                System.out.println("diff " + diff / 1000 / 60 / 60 /
24.);

wenn ich die Differenz zwischen dem 1. April und dem 1. Mai messe, kommen 30 Tage raus. (gleiche Uhrzeit)

wenn ich jedoch zwischen dem 1. März und dem 1. April teste, so komme ich auf 30.958333... Tage - hier wird die Sommerzeit / Winterzeit also berücksichtigt!
 
für aktuelle datumsrechnungen reichen die mitgelieferten methoden aus
wenn jedoch vor 1970 gehn soll brauchste ne extra extrension dafür solltest aber im netz zu genüge finden
 
Differenz bilden zwischen den 2 Daten ist nicht nur wegen der DST ein Problem, sondern vor allem auch wegen Schaltjahren.
 
naja aber um die vergangene zeit dazwischen festzustellen ist das egal
außerdem ist der aunahmefall eines schaltjahres extrem easy zu behandeln...
 
carom schrieb:
Nein ist es eben nicht.
Doch, für die vorgeschlagenen Beispiele ist es egal - die Zeitdifferenz wird auch mit Schaltjahr korrekt berechnet.

Auch der Link bezüglich der Sommerzeitproblematik hat weniger mit dem Bilden der Zeitdifferenz zu tun, als viel mehr damit, dass Java keinen Constructor für ein Datum/Uhrzeit bietet, welcher es zulässt, die Stunde vor bzw. die Stunde nach der Zeitumstellung auszuwählen - das ganze trifft jedoch nur dann zu, wenn die Uhr zurückgestellt wird und dadurch die gleiche Zeit 2 mal existiert.
 
Simpson474 schrieb:
Doch, für die vorgeschlagenen Beispiele ist es egal - die Zeitdifferenz wird auch mit Schaltjahr korrekt berechnet.
.


Meinst du die Beispiele aus dem Startpost? Das hängt von der verwendeten Einheit der Zahl ab, die man aus der Sekundendifferenz errechnen möchte. Für das Beispiel im Startpost ist es wirklich kein Problem, stimmt. Sobald man aber Monate oder gar Jahre haben möchte, geht's nicht mehr. Ein Monat hat abwechselnd 2678400 oder 2592000 Sekunden, im Februar 2419200 aber manchmal eben auch 2505600 Sekunden :)

Man kann die Anzahl an Tagen halt nicht eben mal geteilt 365 nehmen, um die Jahresdifferenz zu erhalten.
 
Wobei es aus meiner Sicht nicht viel Sinn macht, eine Zeitdifferenz in höherer Einheit als Tage auszugeben - eine Zeitdifferenz, welche Monate enthält benötigt immer auch ein Anfangsdatum damit das ganze Eindeutig wird.
 
Jop, das muss man dann individuell entscheiden. Wobei Ausdrücke wie "heute vor 12 Jahren" ja durchaus gebräuchlich und eindeutig sind. Und wenn man maximal Tage ausgibt, dann wird es (je nachdem, was das überhaupt werden soll) eher unübersichtlich. "Zuletzt eingeloggt vor 748 Tagen" ließt sich irgendwie kryptischer als "Zuletzt eingeloggt vor 2 Jahren und ... Tagen".
 
Bei Sachen die vom heutigem Datum weg ausgerechnet sind gebe ich dir recht, da ist die Angabe in Jahren, Monaten usw. geläufiger.
 
Zurück
Oben