Zeitdifferenz mit GregorianCalendar

Status
Nicht offen für weitere Antworten.

zx81

Mitglied
Hallo,

Ich möchte die Differenz von zwei Datumswerten berechnen. Nach der Suche im Forum habe ich das ganze mit GregorianCalendar und getTimeInMillis probiert:
Code:
import java.util.Calendar;
import java.util.GregorianCalendar;

public class ZeitDiff {

	private static GregorianCalendar start;
	private static GregorianCalendar ende;
	private static GregorianCalendar diff = new GregorianCalendar();
	
	public static void main(String[] args) {
		//                            YY   MM  DD  hh  mm  ss
		start = new GregorianCalendar(2006, 1, 24, 22, 59, 00);
		ende  = new GregorianCalendar(2006, 1, 25, 23, 00, 00);

		diff.setTimeInMillis(ende.getTimeInMillis() - start.getTimeInMillis());
		
		System.out.println("START: " + start.get(Calendar.DAY_OF_MONTH) + "." +
									          start.get(Calendar.MONTH) + "." +
									          start.get(Calendar.YEAR) + "  " +
									          start.get(Calendar.HOUR_OF_DAY) + ":" + 
				                         start.get(Calendar.MINUTE) + ":" +
				                         start.get(Calendar.SECOND));
		
		System.out.println("ENDE : " + ende.get(Calendar.DAY_OF_MONTH) + "." +
				   					       ende.get(Calendar.MONTH) + "." +
				   					       ende.get(Calendar.YEAR) + "  " +
									          ende.get(Calendar.HOUR_OF_DAY) + ":" + 
	            			             ende.get(Calendar.MINUTE) + ":" +
	            			             ende.get(Calendar.SECOND));
		
		System.out.println("DIFF :\t\t   " + (diff.get(Calendar.HOUR_OF_DAY)-1) + ":" + 
	            			                   diff.get(Calendar.MINUTE) + ":" +
	            			                   diff.get(Calendar.SECOND));
	}
}

Dabei ergeben sich aber folgende Probleme / Fragen:

1. wenn Start- und Enddatum am selben Tag sind dann ist die Differenz eine Stunde zu groß (was ich in Zeile 32 durch Abziehen einer Stunde 'korrigiert' habe. Warum ist das so?

2. wenn Start- und Enddatum an zwei aufeinander folgenden Tagen sind, so wird die Differenz so berechnet, als wären Start- und Enddatum am selben Tag:

Code:
START: 24.1.2006  22:59:0
ENDE : 25.1.2006  23:0:0
DIFF :	   	   0:1:0

Anscheinend habe ich irgendwo einen Denkfehler? Habt ihr eine Idee?

Der Hintergrund der ganzen Sache ist, dass die Daten für Start- und Endzeit mit getTimestamp aus einer Datenbank gelesen werden, die Differenz berechnet werden muss, und diese dann in der Datenbank abgespeichert werden soll.

Danke für alle Tips!
 

The_S

Top Contributor
1. Nein, ist garantiert nicht so
2. Ist auch net so. Du lässt dir ja schonmal nur Stunde, Minute und Sekunde ausgeben
3. (nur nebenbei) dir ist bewusst, dass Monat 1 der Februar ist!?
4. Du erzeugst aus der Differenz ein neues Datum, GregorianCalendar hat so seine Probleme mit dem Jahr 0 (musste ich auch immer wieder feststellen)
5. (folgt aus 4.) Berechne lieber aus der Diffeferenz in Millisekunden die Differenz in Tagen, Stunden, Minuten, ... da biste auf der sicheren Seite
 

Sky

Top Contributor
Die Differenz aus
Code:
ende.getTimeInMillis() - start.getTimeInMillis()
zu erzeugen ist prinzipiell in Ordnung.

Die Differenz aber mittels "setTimeInMillis" wieder zu setzen in der Hoffnung fertig zu sein wird nicht funktionieren, da die 'millis' den milliseconds after January 1, 1970, 0:00:00 entsprechen. D.h. alle Differenzen die innerhalb eines Jahres liegen, werden zum Ergbnis "1970" haben...
 

The_S

Top Contributor
Stimmt, das wars auch noch ... :D

[edit]

Könnte man z. B. so machen (auf Tage, Stunden, Minuten, Sekunden begrenzt)

Code:
long diffMillis = date1.getTimeInMillis() - date2.getTimeInMillis();
double diffDay = diffMillis / 1000D / 60D / 60D / 24D; 
double diffHour = diffDay % 1 * 24;
double diffMin = diffHour % 1 * 60;
double diffSec = diffMin % 1 * 60;
 

Murray

Top Contributor
Die Verwendung des GregorianCalendars kannst Du Dir auch ganz sparen, da bereits java.sql.Timestamp von java.util.Date die Methode getTime() erbt, die das gleiche liefert wie Calendar.getTimeInMillis.
 

zx81

Mitglied
:toll: Danke für Eure Antworten... hab wieder einiges dazugelernt!

Trotzdem hätte ich noch eine ganz allgemeine Frage:

Wäre es evtl. sinnvoller, diese Berechnung direkt in der Datenbank durchzuführen (Trigger)?
Als Vorteil sehe ich, dass ich mir doch ein bisschen was in der Anwendung sparen könnte (Zeiten lesen, Diff berechnen, Diff in DB schreiben).
Wäre das aus Performance- und Designgründen eine Alternative oder ist das im Endeffekt egal, wie ich es mache? Mich würde halt interessieren, wie man (ihr) das in der Praxis umsetzen würde(t).

Danke für eure Meinungen!
 

Sky

Top Contributor
wie lautet denn die Anforderung überhaupt ? Wer muss wann welche Differenz warum berechnen...

Ohne Anforderung ist es schwer eine Lösung zu finden ;-)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
wolei JAVA Zeitdifferenz feststellen. Java Basics - Anfänger-Themen 4
M Zeitdifferenz JTable - Lösungansatz Java Basics - Anfänger-Themen 3
M Zeitdifferenz von Ende - sleep(x) - Start von x abhängig Java Basics - Anfänger-Themen 6
E Schleife für ein Jahr mit dem GregorianCalendar Java Basics - Anfänger-Themen 1
P GregorianCalendar Java Basics - Anfänger-Themen 4
D GregorianCalendar als Parameter Java Basics - Anfänger-Themen 2
I Datum ohne GregorianCalendar und co. Java Basics - Anfänger-Themen 3
M GregorianCalendar last month Java Basics - Anfänger-Themen 2
M GregorianCalendar Sortieren! Java Basics - Anfänger-Themen 2
P GregorianCalendar:GET Problem Java Basics - Anfänger-Themen 2
M GregorianCalendar Java Basics - Anfänger-Themen 4
U GregorianCalendar Java Basics - Anfänger-Themen 4
R Erste Schritte Arbeitszeit Zähler bzw Feierabend Uhr | GregorianCalendar | SimpleDateFormat| Java Basics - Anfänger-Themen 3
R GregorianCalendar auf Datum reduzieren Java Basics - Anfänger-Themen 9
A GregorianCalendar heute + X Tage Java Basics - Anfänger-Themen 11
L Java GregorianCalendar Java Basics - Anfänger-Themen 2
N GregorianCalendar Sommer/Winterzeit Probleme Java Basics - Anfänger-Themen 4
N GregorianCalendar Kalenderwoche in SimpelDateFormat auf 2 Systemen verschieden Java Basics - Anfänger-Themen 8
R mit GregorianCalendar Datum generieren Java Basics - Anfänger-Themen 3
C GregorianCalendar 2 Datumswerte(Differenz) auf volles Jahr prüfen Java Basics - Anfänger-Themen 4
C String to GregorianCalendar Java Basics - Anfänger-Themen 4
J GregorianCalendar: Probleme mit WEEK_OF_YEAR Java Basics - Anfänger-Themen 7
M Daten vergleichen mit GregorianCalendar - HILFE! :) Java Basics - Anfänger-Themen 3
K GregorianCalendar Java Basics - Anfänger-Themen 9
L Frage zur Ausgabe eines gesetzten GregorianCalendar Datums Java Basics - Anfänger-Themen 4
Schandro GregorianCalendar Sommerzeit abziehen Java Basics - Anfänger-Themen 6
A GregorianCalendar -Darstellung mit drawString Java Basics - Anfänger-Themen 3
P Problem mit setzen von Zeiten im GregorianCalendar Java Basics - Anfänger-Themen 3
E GregorianCalendar- Datum erstellen Java Basics - Anfänger-Themen 7
G GregorianCalendar Java Basics - Anfänger-Themen 4
W Date in Gregoriancalendar Java Basics - Anfänger-Themen 2
C GregorianCalendar glaubt mir alles wieso! Java Basics - Anfänger-Themen 12
M ArrayList mit Objekt vom Typ GregorianCalendar Java Basics - Anfänger-Themen 3
C millisekunden bei gregoriancalendar stimmen nicht Java Basics - Anfänger-Themen 2
G GregorianCalendar (vor und zurück) Java Basics - Anfänger-Themen 7
G GregorianCalendar Java Basics - Anfänger-Themen 10
S GregorianCalendar - Vergangene Zeit Java Basics - Anfänger-Themen 17
M GregorianCalendar bringt mich um. Java Basics - Anfänger-Themen 8
H GregorianCalendar Zeit abziehen (Countup) Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben