Zeiträume vergleichen

Status
Nicht offen für weitere Antworten.

Keo

Mitglied
Ich habe zwei Zeiträume als Date-Objekte:

Java:
Date von1, bis1, von2, bis2

Ich würde gerne abfragen, ob sich Zeitraum1 (von1-bis1) mit Zeitraum2 (von2-bis2) überschneidet.

Hat jmd einen sauberen Code für mich?
 

faetzminator

Gesperrter Benutzer
Java:
if ((von2.before(von1) && von1.before(bis2))
        || (von2.before(bis1) && bis1.before(bis2))
        || (von1.before(von2) && bis2.before(bis1))) {
    [...]
}
(ungeprüft)

EDIT: before() ist natürlich kürzer :oops:
 
Zuletzt bearbeitet:
B

bygones

Gast
Java:
if (von1.before(bis2) && von2.before(bis1)) { ... }

unter der annahme von1 != bis2 etc
 
S

Spacerat

Gast
müsste so funktionieren:
Java:
boolean ueberschneidung = bis1.compareTo(von2) < 0
                       || bis2.compareTo(von1) < 0;
Zur Not kann man "<" auch noch durch "<=" ersetzen.
 
Zuletzt bearbeitet von einem Moderator:

MrWhy

Aktives Mitglied
Hi,

Lösungsvorschlag Nr.1 : versuch es doch mal mit der Umrechnung in den julianischen Kalender mit dem kannst du dann Rechnen.

Lösungsvorschlag Nr.2 : Versuch es doch mal mit der Umrechnung in einen UTS damit kann man dann auch rechnen.

Lösungsvorschlag Nr.3 : Falls du eine DB wie MySQL verwendest, mach es mit dieser.

Lösungsvorschlag Nr.4 : siehe die oberen Lösungen ;)

Grüße

Mr.
 

faetzminator

Gesperrter Benutzer
Aber es gibt doch im ganzen 3 Cases...:
1. von1 liegt zwischen von2 und bis2
2. bis1 liegt zwischen von2 und bis2
3. von1 ist vor von2 und bis1 ist nach bis2
Und Spacerat's Lösung checkt nur Punkt 1.
 
B

bygones

Gast
interessant:rtfm:

wobei spacerats falsch ist !
Java:
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.MONTH, 2); // maerz 2009
Date von1 = calendar.getTime();
calendar.set(Calendar.MONTH, 11); // dezember 2009
Date bis2 = calendar.getTime();
calendar.set(Calendar.MONTH, 8); // September 2009
Date bis1 = calendar.getTime();
Date von2 = new Date(); // Juli 2009

boolean ueberschneidung = bis1.compareTo(von2) < 0 || bis2.compareTo(von1) < 0;
System.out.println(ueberschneidung); false
System.out.println(von1.before(bis2) && von2.before(bis1)); // true
er hat die negierung bei seinem Ausdruck vergessen...
Java:
!(bis1.compareTo(von2) < 0 || bis2.compareTo(von1) < 0)
 
S

Spacerat

Gast
@deathbyaclown: :oops:... hast ja recht... aber warum negieren? aus "<" wird ">"... oder etwa doch nicht? Bin mir plötzlich gar nicht mehr so sicher...
 

sliwalker

Top Contributor
Du kannst auch folgendes machen, denn mit before und after bekommst Du irgendwann einen Knoten im Kopf:

Schreib Dir eine neue Date-Klasse.
Die Klasse hat einen Index und den Datumswert.
Überschreibe compareTo und equals.
Packe alle Deine neuen Datumsobjekte in eine List.
Sortiere die Liste.
Iteriere durch alle Einträge und gucke ob der Index mit dem Schleifenzähler übereinstimmt.

Wenn ja, liegen alle Datumswerte hintereinander.
Wenn nein, überlappen sie sich.
 

faetzminator

Gesperrter Benutzer
sliwalker, deine Idee ist gut, aber was ist, wenn Zeitfenster 1 nach Zeitfenster 2 kommen darf? Oder wenn die End- bzw. Startdaten aufeinander liegen dürfen? Na gut, da kann man den Index als zweiten Vergleichswert verwenden. Umgekehrt ebenfalls (falls keine Treffer erlaubt sind), einfach andersrum.
 

sliwalker

Top Contributor
Danke.

Ich habe diesen Weg gerade aus einem anderen UseCase gerissen. Funktioniert aber dennoch (genau wie Du es beschrieben hast). Den Weg nehme ich, wenn ich aus einem Haufen von Datumswerten Perioden ermitteln möchte.

Wenn man es ganz richtig machen will, muss man die Liste von Datumswerte noch ein wenig normalisieren. Doppelte rauswerfen usw...

Aber im Prinzip sollte das auch für diesen Anwendungsfall funktionieren. Man muss halt die compareTo vernünftig anpassen.
 
B

bygones

Gast
Du kannst auch folgendes machen, denn mit before und after bekommst Du irgendwann einen Knoten im Kopf:

Schreib Dir eine neue Date-Klasse.
Die Klasse hat einen Index und den Datumswert.
Überschreibe compareTo und equals.
Packe alle Deine neuen Datumsobjekte in eine List.
Sortiere die Liste.
Iteriere durch alle Einträge und gucke ob der Index mit dem Schleifenzähler übereinstimmt.

Wenn ja, liegen alle Datumswerte hintereinander.
Wenn nein, überlappen sie sich.

warum eine komplexere neue lösung erschaffen die mögl. fehler hat wenn es etwas simples für die Lösung schon gibt ?!
 
B

bygones

Gast
simpel?
komplex?

wenn du meinst...
Ich halte before und after für wesentlich komplexer, aber egal
mhm lass mal überlegen... entweder ich schreib n einzeiler mit before bzw compareTo oder ich schreib eine eigene Klasse, überschreib methoden, erstelle eine liste, lasse sie sortieren, iteriere und muss dann richtig vergleichen....

was ist nun komplexer ?
 

sliwalker

Top Contributor
Also ich habe mir nur Deinen Link angeschaut und wurde erschlagen von mehreren DIN A4 Seiten an Hinweisen und Vorgehensweisen. Deinen Einzeiler habe ich nicht überprüft.

Aber im Hinblick auf Wiederverwendbarkeit, kann man sich doch wohl einmal die Arbeit machen oder nicht?
 
S

Spacerat

Gast
Ok... Ich hab's verzockt. Mit dem KSKB von deathbyaclown ergab sich folgendes:
Java:
import java.util.Calendar;
import java.util.Date;

public class Overlap
{
  public static void main(String ... args)
  {
    Calendar calendar = Calendar.getInstance();

    // Ueberschneidung
    calendar.set(Calendar.MONTH, 2); // maerz 2009
    Date von1 = calendar.getTime();
    calendar.set(Calendar.MONTH, 8); // September 2009
    Date bis1 = calendar.getTime();
    Date von2 = new Date(); // Juli 2009
    calendar.set(Calendar.MONTH, 11); // dezember 2009
    Date bis2 = calendar.getTime();

    boolean ueberschneidung = bis1.compareTo(von2) > 0 || bis2.compareTo(von1) < 0;
    System.out.println(ueberschneidung);
    System.out.println(von1.before(bis2) && von2.before(bis1));

    // keine Ueberschneidung
    calendar.set(Calendar.MONTH, 2); // maerz 2009
    von1 = calendar.getTime();
    calendar.set(Calendar.MONTH, 5); // Mai 2009
    bis1 = calendar.getTime();
    von2 = new Date(); // Juli 2009
    calendar.set(Calendar.MONTH, 11); // dezember 2009
    bis2 = calendar.getTime();

    ueberschneidung = bis1.compareTo(von2) > 0 || bis2.compareTo(von1) < 0;
    System.out.println(ueberschneidung); // false
    System.out.println(von1.before(bis2) && von2.before(bis1));

    // Abschnitt 2 in Abschnitt 1 (Überschneidung)
    calendar.set(Calendar.MONTH, 2); // maerz 2009
    von1 = calendar.getTime();
    calendar.set(Calendar.MONTH, 11); // Dezember 2009
    bis1 = calendar.getTime();
    von2 = new Date(); // Juli 2009
    calendar.set(Calendar.MONTH, 7); // August 2009
    bis2 = calendar.getTime();

    ueberschneidung = bis1.compareTo(von2) > 0 || bis2.compareTo(von1) < 0;
    System.out.println(ueberschneidung);
    System.out.println(von1.before(bis2) && von2.before(bis1));

    // Abschnitt 1 in Abschnitt 2 (Überschneidung)
    calendar.set(Calendar.MONTH, 2); // maerz 2009
    von2 = calendar.getTime();
    calendar.set(Calendar.MONTH, 11); // Dezember 2009
    bis2 = calendar.getTime();
    von1 = new Date(); // Juli 2009
    calendar.set(Calendar.MONTH, 7); // August 2009
    bis1 = calendar.getTime();

    ueberschneidung = bis1.compareTo(von2) > 0 || bis2.compareTo(von1) < 0;
    System.out.println(ueberschneidung);
    System.out.println(von1.before(bis2) && von2.before(bis1));
  }
}
Ausgabe:
Code:
true
true
false
false
true
true
true
true
Fazit:
Java:
von1.before(bis2) && von2.before(bis1)
und
Java:
bis1.compareTo(von2) > 0 || bis2.compareTo(von1) < 0
verhalten sich gleich, wobei ersteres noch ein wenig kürzer und damit 1. übersichtlicher und 2. weniger komplex ist als alles andere (neue Klasse... :lol:).
@Ebenius: mit deiner Formel(?) kann ich irgendwie nichts anfangen... für mich liest sich das wie "komischer Haken(A<B)Quadrat(A>=B)". Ok der "komische Haken" könnte eine negation bedeuten. Aber was bedeutet das Quadrat?
 
Zuletzt bearbeitet von einem Moderator:

Ebenius

Top Contributor
@Ebenius: mit deiner Formel(?) kann ich irgendwie nichts anfangen... für mich liest sich das wie "komischer Haken(A<B)Quadrat(A>=B)". Ok der "komische Haken" könnte eine negation bedeuten. Aber was bedeutet das Quadrat?
Der Haken ist die logische Negation. Und das Quadrat sagt, dass Du das Unicode-Zeichen für "equivalent to" nicht in Deinem Font hast:
U0224D.png


Ebenius
 
B

bygones

Gast
Also ich habe mir nur Deinen Link angeschaut und wurde erschlagen von mehreren DIN A4 Seiten an Hinweisen und Vorgehensweisen. Deinen Einzeiler habe ich nicht überprüft.

Aber im Hinblick auf Wiederverwendbarkeit, kann man sich doch wohl einmal die Arbeit machen oder nicht?

der link war nur ergänzung - mein einzeiler (und spacerats) sind das was ich eigentlich mein.
Aber auch auf hinblickder wiederverwendbarkeit - warum sich arbeit machen wenn es eben schon existierende Mechanismen gibt ?!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Zeiträume unterteilen, JodaTime Java Basics - Anfänger-Themen 20
M Vergleichen, ob eine Liste länger als andere ist Java Basics - Anfänger-Themen 6
E Arrays in einer ArrayList miteinander vergleichen Java Basics - Anfänger-Themen 12
A Daten aus einer HashMap aus einer DB speichern und mit neuen Werten vergleichen Java Basics - Anfänger-Themen 8
I 2 verschiedene Klassen mit gleichen Property vergleichen Java Basics - Anfänger-Themen 13
J 2 listen vergleichen, die auch null Elemente haben können ! Java Basics - Anfänger-Themen 9
J ArrayList vergleichen im spiel Mastermind Java Basics - Anfänger-Themen 2
J Array.list vergleichen Java Basics - Anfänger-Themen 1
M 3 Zahlen miteinander vergleichen Java Basics - Anfänger-Themen 18
S Inhalte aus Array vergleichen und Max ausgeben Java Basics - Anfänger-Themen 3
B bei 2 Arrays Anzahl gleicher Elemente vergleichen? Java Basics - Anfänger-Themen 49
W LocalDate vergleichen mit Equals? Java Basics - Anfänger-Themen 7
S mehrere TreeSets so speichern, dass man sie miteinander vergleichen kann Java Basics - Anfänger-Themen 1
ArrayList mit unbekannter Menge an Arrays die Arrays vergleichen Java Basics - Anfänger-Themen 9
M String mit Variable vergleichen Java Basics - Anfänger-Themen 9
O Array mit einem Zeichen vergleichen Java Basics - Anfänger-Themen 1
S String mit Int input vergleichen Java Basics - Anfänger-Themen 5
S Den Minimumberechnen 2 codes vergleichen Java Basics - Anfänger-Themen 4
S Chars vergleichen ohne Betrachtung der Groß und Kleinschreibung Java Basics - Anfänger-Themen 7
S Aktuell beste Methode um zwei Bilder zu vergleichen..? Java Basics - Anfänger-Themen 1
A 2 Strings vergleichen in einer methode wenn man mit Globalen variablen arbeitet Java Basics - Anfänger-Themen 12
districon Vergleichen von Objekten Java Basics - Anfänger-Themen 20
Bademeister007 Elemente aus zwei verschiedenen Arrays miteinander vergleichen und gegeben falls entfernen Java Basics - Anfänger-Themen 14
M Strings vergleichen Java Basics - Anfänger-Themen 10
J Zufallszahlen generieren und Werte vergleichen Java Basics - Anfänger-Themen 3
Stephan_kl Reihenwert-Berechnung, Ergebnis mit vorherigem Ergebnis vergleichen Java Basics - Anfänger-Themen 11
J Zwei Objekte vergleichen Java Basics - Anfänger-Themen 8
R Werte und Reihenfolge in 2d Arrays vergleichen Java Basics - Anfänger-Themen 5
JaVaN0oB Wörterraten - Falsche Ausgabe, String/Chars vergleichen Java Basics - Anfänger-Themen 2
O String mit Character vergleichen Java Basics - Anfänger-Themen 3
S 2 Strings mit Equals vergleichen Java Basics - Anfänger-Themen 11
N 2D Arrays jedes xy vergleichen Java Basics - Anfänger-Themen 7
M Objekte mittels equals vergleichen Java Basics - Anfänger-Themen 14
J zwei String Arrays miteinander vergleichen Java Basics - Anfänger-Themen 18
F Eine Zahl mit Arrays vergleichen Java Basics - Anfänger-Themen 7
D Vergleichen von Strings Java Basics - Anfänger-Themen 6
M Objekte miteinander vergleichen Java Basics - Anfänger-Themen 18
M Matrix Elemente vergleichen Java Basics - Anfänger-Themen 11
I Alle Elemente von zwei Listen vergleichen Java Basics - Anfänger-Themen 1
R String vergleichen Java Basics - Anfänger-Themen 59
S Vergleichen ob der Integer der benutzt eingeben werden soll überhaupt ein int ist Java Basics - Anfänger-Themen 1
C System.in.read() Boolsche Werte vergleichen Java Basics - Anfänger-Themen 8
K Boolean in einer Methode um 2 Objekte zu vergleichen Java Basics - Anfänger-Themen 12
N Zwei Daten (Datum) miteinander vergleichen, abspeichern, laden Java Basics - Anfänger-Themen 4
A Daten auslesen/vergleichen Java Basics - Anfänger-Themen 3
J Strings untereinander in einer Liste vergleichen Java Basics - Anfänger-Themen 18
E Zahlen von einem Array mit zahlen von zweitem Array vergleichen Java Basics - Anfänger-Themen 27
A Suffix vergleichen Java Basics - Anfänger-Themen 2
L Erste Schritte Elemente zwei Schlangen vergleichen Java Basics - Anfänger-Themen 14
PaperHat Objekte in Array vergleichen Java Basics - Anfänger-Themen 9
F Input/Output 2 Textdateien mit einander vergleichen Java Basics - Anfänger-Themen 11
N Zwei Strings mit "==" vergleichen warum TRUE Java Basics - Anfänger-Themen 2
M String vergleichen Java Basics - Anfänger-Themen 5
T Datentypen Kann Java 2 verschiedene Datentypen vergleichen? Java Basics - Anfänger-Themen 2
S Array, Geburtsdatum, Vergleichen Java Basics - Anfänger-Themen 28
F JList Elemente mit Strings vergleichen Java Basics - Anfänger-Themen 12
L Variablen Versionsnummern vergleichen Java Basics - Anfänger-Themen 5
N Methoden int[]'s vergleichen Java Basics - Anfänger-Themen 4
N Methoden HashMap interne Werte miteinander vergleichen Java Basics - Anfänger-Themen 7
T JPasswordFielder vergleichen Java Basics - Anfänger-Themen 16
K Datentypen Einträge zweier Matrizen vergleichen Java Basics - Anfänger-Themen 4
M Objekt mit Hashmap vergleichen Java Basics - Anfänger-Themen 22
S Werte in Liste mit Nachfolger vergleichen Java Basics - Anfänger-Themen 5
M Erste Schritte Mehrere eingaben in einer Line vergleichen (if equals...) Java Basics - Anfänger-Themen 6
J Zahlensequenz mit einer anderen Sequenz vergleichen Java Basics - Anfänger-Themen 6
P String größer kleiner gleich vergleichen Java Basics - Anfänger-Themen 6
H Bubblesort-Zwei Integer auf Dekade vergleichen. Java Basics - Anfänger-Themen 6
J Methoden BinaryStrings vergleichen Java Basics - Anfänger-Themen 12
C arrey mit string vergleichen Java Basics - Anfänger-Themen 2
K Methoden Passwort Bestätigungsfeld mit Password vergleichen Java Basics - Anfänger-Themen 7
M Wortteile im String vergleichen Java Basics - Anfänger-Themen 2
L Rekursiv zwei Strings vergleichen Java Basics - Anfänger-Themen 3
J Algorithmus - Strings auf eigene Reihenfolge miteinander vergleichen Java Basics - Anfänger-Themen 4
C Große Zahlen vergleichen Java Basics - Anfänger-Themen 19
? Methoden Boolean Wert vergleichen und einlesen Java Basics - Anfänger-Themen 1
Korvinus Vergleichen von 2 csv-Dateien Java Basics - Anfänger-Themen 2
K Comparable - Objekte aus Array vergleichen und größtes auswählen Java Basics - Anfänger-Themen 1
G Passwort und Passwort wiederholen in if-Abfrage vergleichen Java Basics - Anfänger-Themen 15
JavaNewbie2.0 String vergleichen Java Basics - Anfänger-Themen 4
M 2 Stellen in einem Array vergleichen und bei übereinstimmen eine davon ersetzen Java Basics - Anfänger-Themen 1
A Methoden Char-Arrays auf aufeinanderfolgende Elemente vergleichen! Java Basics - Anfänger-Themen 7
R Objekte Vergleichen und Sortieren Java Basics - Anfänger-Themen 3
A Werte innerhalb von resultset vergleichen Java Basics - Anfänger-Themen 2
J Zwei String-Variabeln vergleichen Java Basics - Anfänger-Themen 5
I Meta Tags vergleichen mit Html Vorgabe Java Basics - Anfänger-Themen 8
T Java gleichfarbige Pixel vergleichen Java Basics - Anfänger-Themen 5
B Arrayinhalt mit String vergleichen Java Basics - Anfänger-Themen 6
J Objekttypen vergleichen und filtern Java Basics - Anfänger-Themen 6
J 2 Arrays vergleichen (Unterschiedliche Längen) Java Basics - Anfänger-Themen 42
K Textdateien vergleichen optimieren Java Basics - Anfänger-Themen 9
R Zeichen in String vergleichen Java Basics - Anfänger-Themen 75
P Erste Schritte Mehrdimensoniales Array vergleichen Java Basics - Anfänger-Themen 2
S Methoden Vergleichen von zwei Listen in der Geschwindigkeit von O(n+m) Java Basics - Anfänger-Themen 32
B ArrayList vergleichen Java Basics - Anfänger-Themen 18
J Generics Datentypen vergleichen Java Basics - Anfänger-Themen 16
OlafHD String in einer If-Anweisung Vergleichen Java Basics - Anfänger-Themen 2
D Variablen Variable char vergleichen Java Basics - Anfänger-Themen 5
F String vergleichen Java Basics - Anfänger-Themen 9
S LinkedList mit Input vergleichen. Java Basics - Anfänger-Themen 5
Shizmo Arrays miteinander vergleichen Java Basics - Anfänger-Themen 22

Ähnliche Java Themen

Neue Themen


Oben