Zeitüberschneidung von zwei Terminen

noxum

Mitglied
Hey,

ich komm bei einem Problem nicht weiter und wollt hier mal um Hilfe bitten.

Und zwar habe ich folgendes Problem:

Ich habe eine Klasse Termin welche ein Datum, eine Uhrzeit und eine Länge hat. (keine org. Java Klassen sondern selbst geschrieben => keine standart Methoden)

Ich kann mir von der Klasse Termin schon das Enddatum und die Endzeit zurück geben lassen, jetzt wollte ich aber prüfen ob sich zwei Termine überschneiden.

Ich mein ich könnte jetzt versuchen alle möglichen Fälle abzufragen, aber wenn ich so darüber nachdenke sind es ganzschön viele.

Deswegen meine Frage, gibt es eine relative einfache Abfrage welche alle Fälle abdeckt ohne 20 verschachtelte If-blöcke zu haben ?



Danke schonmal für eure Hilfe

Edit: Ahja, bei der Datum und der Uhrzeit Klasse welche sich in der Termin Klasse befinden gibt es auch jeweils eine "isEarlierThan()" bzw. "isLaterThan()" Methode, denke mal die wird man brauchen :)
 
Zuletzt bearbeitet:
Vom Konzept her das gleiche wie ich hier mal für MySQL zusammengestellt habe:
MySQL Perioden vergleichen
SQL:
LEAST(end_2, end_1) >= GREATEST(start_2, start_1)

;it Math.min() und Math.max() kannst du das in Java für Zahlen handeln. Ich würde gaub einfach über getTime() lösen.

Ungetestet:
Java:
if(
    Math.min(periode1.endDate.getTime(), periode2.endDate.getTime()) 
    >= Math.max(periode1.startDate.getTime(), periode2.startDate.getTime())
){
    //TODO: Perioden überschneiden sich
}
 
Ich kann mir von der Klasse Termin schon das Enddatum und die Endzeit zurück geben lassen, jetzt wollte ich aber prüfen ob sich zwei Termine überschneiden.

Ich mein ich könnte jetzt versuchen alle möglichen Fälle abzufragen, aber wenn ich so darüber nachdenke sind es ganzschön viele.

Deswegen meine Frage, gibt es eine relative einfache Abfrage welche alle Fälle abdeckt ohne 20 verschachtelte If-blöcke zu haben ?

Was sollen das denn für Fälle sein? Meines Erachtens überschneiden sich zwei Termine, wenn
Start1 < Start2 < Ende1
oder
Start1 < Ende2 < Ende1
 
Vielen Dank schonmal euch beiden.

Zu der getTime(), dass geht bei mir leider nicht, da es ja selbstgeschriebene Klassen sind.

Wenn "Start1 < Start2 < Ende1 oder Start2 < Start1 < Ende2" alles abdeckt, dann wäre es schonmal ein sehr guter Anfang... dann muss ich halt hier noch die Zeit mitreinbrigen.

Erst habe ich gedacht ich könne einmal "Start1 < Start2 < Ende1 oder Start2 < Start1 < Ende2" Für das Datum abfragen und dann nochmal "Start1 < Start2 < Ende1 oder Start2 < Start1 < Ende2" für die Uhrzeit. Leider geht das so nicht ^^... hmm
 
Date.before(other)

So könntest Du die beiden Termine prûfen, falls Du ein Date-Objekt verwendest.

Ist's ein long dann so, wie oben mein Vorschreiber.
 
Zurück