Differenz zweier Daten ermitteln in Java

Hallo Zusammen,

habe folgendes Problem, das mich in den Wahnsinn treibt.

Ich lese eine MySQL-DB aus. In der ersten Query (siehe Code) ermittle ich zuerst alle KdId’s und die dazugehörigen AktionId’s. Mit den gewonnenen KdId’s und AktionsId’s mache ich eine weitere Query, die mir alle Daten (verbunden mit der gewünschten KdId und AktionId) ausgibt. Soweit so gut, funktioniert auch alles ganz gut.

Die Ausgabe sieht dann so aus:

„date“ „KdId“ „AktionId“ „Clicks“
„2011-11-23 22:00:00“ „6002“ „7897“ „5“
„2011-11-24 00:00:00“ „6002“ „7897“ „8“
„2011-11-24 01:00:00“ „6002“ „7897“ „9“

Wie man sehen kann fehlt der Datensatz für 2011-11-23 23:00:00, weil es dort 0 Klicks gab. Meine Aufgabe ist es die fehlenden Datensätze zu ergänzen, und zwar so:

„date“ „KdId“ „AktionId“ „Clicks“
„2011-11-23 22:00:00“ „6002“ „7897“ „5“
„2011-11-23 23:00:00“ „6002“ „7897“ „0“
„2011-11-24 00:00:00“ „6002“ „7897“ „8“
„2011-11-24 01:00:00“ „6002“ „7897“ „9“

Der dazu gehörige Code:


Statement Stmt = conn.createStatement();

List daten = new ArrayList();

ResultSet rs = Stmt.executeQuery(„SELECT KdId, AktionId FROM meineDB GROUP BY …“);

while (rs.next()) {
Daten dat = new Daten(rs.getString(„KdId“),
rs.getString(„AktionId“));
daten.add(dat);
}

for(Daten dat : daten) {
LinkedList daten2 = new LinkedList ();

rs = Stmt.executeQuery(„SELECT * FROM meineDB WHERE KdId=“ + dat.getKdId()+ " AND AktionId=" +dat.getAktionId());

while(rs.next()) {
Daten2 dat2 = new Daten2(rs.getDate(„date“), rs.getTime(1), rs.getString(„kdId“), rs.getString(„AktionId“), rs.getString(„clicks“));
daten2.add(dat2);
}

}

Mein Problem ist nun das aktuelle sowie das darauffolgende Datum/Uhrzeit miteinander zu vergleichen. Mit dat2.getDate() bzw. dat2.getTime() bekomme ich die aktuellen Datensätze, aber wie bekomme ich die Nachfolger? Wie müsste die Schleife dann aussehen? Wie kann ich den Unterschied von einer Stunde feststellen (besonders in dem Fall, wenn es von 23:00:00 auf 00:00:00 übergeht)?
Bin mit meinen Java-Kenntnissen am Ende und bitte um Unterstützung.

Vielen Dank im Voraus
udaff

soweit ich das ganze verstanden habe hast du ein Applet das die anzahl der klicks pro Std. zählt und die in eine Datenbank schreibt.
Warum werden die Null-Klicks herausgefiltert - kannst du das ändern?
Wenn nicht brauchst du ein Unterprogram, das jjjj-mm-tt zz mit Teilstrings untersuchen. Wenn zz zum nächsten Satz 01 größer 1 bzw. (zz-12) größer 1 ist fehlt der Satz.
!!! Das Sortieren der Datensätze nicht vergessen!!!

Bei den mm must du nach 12 auf 01 ändern.
Bei zz must du nach 23 auf 00 ändern.
Jetzt kannst du die Datensätze korrekt sortieren und den Fehlenden einfügen.
Anschliesend must du nur noch die

Hallo udaf,

hier muss ich leider passen. Dazu fehlen mir die Java Kenntnisse.

MfG
Jekyll

Hi,

Du kannst die Datumsangaben mit den Methoden ‚before‘ und ‚after‘ vergleichen => http://download.oracle.com/javase/6/docs/api/index.html

Mit Hilfe eines Comparators kannst Du die Liste sortieren. Benutze dazu obige Methoden (http://download.oracle.com/javase/6/docs/api/java/ut…).

Ich würde aber empfehlen Joda-Time zu verwenden. Bietet einiges mehr! => http://joda-time.sourceforge.net

Moin,

while(rs.next()) {
Daten2 dat2 = new Daten2(rs.getDate(„date“), rs.getTime(1),
rs.getString(„kdId“), rs.getString(„AktionId“),
rs.getString(„clicks“));
daten2.add(dat2);
}

}

Mein Problem ist nun das aktuelle sowie das darauffolgende
Datum/Uhrzeit miteinander zu vergleichen. Mit dat2.getDate()
bzw. dat2.getTime() bekomme ich die aktuellen Datensätze, aber
wie bekomme ich die Nachfolger? Wie müsste die Schleife dann
aussehen? Wie kann ich den Unterschied von einer Stunde
feststellen (besonders in dem Fall, wenn es von 23:00:00 auf
00:00:00 übergeht)?
Bin mit meinen Java-Kenntnissen am Ende und bitte um
Unterstützung.

Merke dir das vorangangene Daten2-Objekt. Vergleiche das aktuelle mit dem vorangegangenen (bei der ersten Iteration ist es natürlich null). Speichere Datum und Zeit nicht getrennt in Daten2, siehe dazu java.sql.ResultSet.getTimestamp(). Die Differenz bildest du dann am besten, indem du die Zeiten nach Unix-Time umwandelst (siehe java.util.Date.getTime()).

HTH

Hallo udaff,

am besten Du arbeitest mit einem Calendar object.

Calendar cal = GregorianCalendar.getInstance();

Falls Du noch Details benötigst, melde Dich noch einmal.

Gruß,

Rudolf Schmidt

Hallo,

ich kann dir da leider auch nicht helfen =/