# Zeitüberschneidung von zwei Terminen



## noxum (4. November 2012)

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


----------



## Yaslaw (4. November 2012)

Vom Konzept her das gleiche wie ich hier mal für MySQL zusammengestellt habe:
MySQL Perioden vergleichen


> ```
> 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:

```
if(
    Math.min(periode1.endDate.getTime(), periode2.endDate.getTime()) 
    >= Math.max(periode1.startDate.getTime(), periode2.startDate.getTime())
){
    //TODO: Perioden überschneiden sich
}
```


----------



## noxum (4. November 2012)

Was meinst du denn mit "getTime()"? 
Millisekunden seit 1970 oder wie darf ich das verstehen?


----------



## HonniCilest (5. November 2012)

> 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


----------



## Yaslaw (5. November 2012)

Nicht ganz.
Dieser Fall trifft zb auch zu
Start 2 < Start 1 UND End1 < End2

@noxum
jepp. getTime() von einem Date-Object. Keien Ahnung was du da für Klassen einsetzt.
Die möglcihen Fälle habe ich auf der Seite http://wiki.yaslaw.info/wikka/MySqlIntersectPeriodesOld grafisch zusammengestellt


----------



## HonniCilest (5. November 2012)

Yaslaw hat gesagt.:


> Nicht ganz.
> Dieser Fall trifft zb auch zu
> Start 2 < Start 1 UND End1 < End2



Stimmt! Aber 
Start1 < Start2 < Ende1
oder
Start2 < Start1 < Ende2
Sollte passen oder?


----------



## noxum (5. November 2012)

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


----------



## schnuffie (8. November 2012)

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.


----------

