[JAVA] Überprüfung der Periodenduplizierung (LocalTime, LocalDate, LocalDateTime)

Ich habe das Gefühl, jedes Mal über Logik nachzudenken, also notiere es dir.

 /**
   *Überprüfen Sie, ob doppelte Zeiträume vorhanden sind(Ortszeitversion)
   *Wenn sich die Perioden an einem einzelnen Punkt überlappen, wird auch davon ausgegangen, dass sie sich überlappen.
   * e.g.)
   *Zeitraum 1=> 10:00 ~ 11:00
   *Zeitraum 2=> 11:00 ~ 12:00
   *Ergebnis=>Es gibt Doppelarbeit(true)
   *
   * @param start1 Beginn der Periode 1
   * @param end1 Ende der Periode 1
   * @param start2 Beginn der Periode 2
   * @param end2 Ende der Periode 2
   * @Wenn true dupliziert, wird true zurückgegeben
   */
  def isOverlapped(start1: LocalTime, end1: LocalTime, start2: LocalTime, end2: LocalTime): Boolean =
    !start2.isAfter(end1) && !end2.isBefore(start1)

  /**
   *Überprüfen Sie, ob doppelte Zeiträume vorhanden sind(Ortszeitversion,Ende der Periode Option möglich)
   *Wenn sich die Perioden an einem einzelnen Punkt überlappen, wird auch davon ausgegangen, dass sie sich überlappen.
   * e.g.)
   *Zeitraum 1=> 10:00 ~ 11:00
   *Zeitraum 2=> 11:00 ~ 12:00
   *Ergebnis=>Es gibt Doppelarbeit(true)
   *
   * @param start1 Beginn der Periode 1
   * @param end1Opt Ende von Periode 1(Wenn Keine, der Zielzeitraum von Anfang an)
   * @param start2 Beginn der Periode 2
   * @param end2Opt Ende von Periode 2(Wenn Keine, der Zielzeitraum von Anfang an)
   * @Wenn true dupliziert, wird true zurückgegeben
   */
  def isOverlapped(start1: LocalTime, end1Opt: Option[LocalTime], start2: LocalTime, end2Opt: Option[LocalTime]): Boolean =
    end1Opt.fold(true)(!start2.isAfter(_)) && end2Opt.fold(true)(!_.isBefore(start1))

  /**
   *Überprüfen Sie, ob doppelte Zeiträume vorhanden sind(Lokale Datumsversion)
   *Wenn sich die Perioden an einem einzelnen Punkt überlappen, wird auch davon ausgegangen, dass sie sich überlappen.
   * e.g.)
   *Zeitraum 1=> 2020-10-01 ~ 2020-10-10
   *Zeitraum 2=> 2020-10-10 ~ 2020-10-20
   *Ergebnis=>Es gibt Doppelarbeit(true)
   *
   * @param start1 Beginn der Periode 1
   * @param end1 Ende der Periode 1
   * @param start2 Beginn der Periode 2
   * @param end2 Ende der Periode 2
   * @Wenn true dupliziert, wird true zurückgegeben
   */
  def isOverlapped(start1: LocalDate, end1: LocalDate, start2: LocalDate, end2: LocalDate): Boolean =
    !start2.isAfter(end1) && !end2.isBefore(start1)

  /**
   *Überprüfen Sie, ob doppelte Zeiträume vorhanden sind(Lokale Datumsversion,Ende der Periode Option möglich)
   *Wenn sich die Perioden an einem einzelnen Punkt überlappen, wird auch davon ausgegangen, dass sie sich überlappen.
   * e.g.)
   *Zeitraum 1=> 2020-10-01 ~ 2020-10-10
   *Zeitraum 2=> 2020-10-10 ~ 2020-10-20
   *Ergebnis=>Es gibt Doppelarbeit(true)
   *
   * @param start1 Beginn der Periode 1
   * @param end1Opt Ende von Periode 1(Wenn Keine, der Zielzeitraum von Anfang an)
   * @param start2 Beginn der Periode 2
   * @param end2Opt Ende von Periode 2(Wenn Keine, der Zielzeitraum von Anfang an)
   * @Wenn true dupliziert, wird true zurückgegeben
   */
  def isOverlapped(start1: LocalDate, end1Opt: Option[LocalDate], start2: LocalDate, end2Opt: Option[LocalDate]): Boolean =
    end1Opt.fold(true)(!start2.isAfter(_)) && end2Opt.fold(true)(!_.isBefore(start1))

  /**
   *Überprüfen Sie, ob doppelte Zeiträume vorhanden sind(LocalDateTime-Version)
   *Wenn sich die Perioden an einem einzelnen Punkt überlappen, wird auch davon ausgegangen, dass sie sich überlappen.
   * e.g.)
   *Zeitraum 1=> 2020-10-01 10:00:00 ~ 2020-10-10 20:00:00
   *Zeitraum 2=> 2020-10-10 20:00:00 ~ 2020-10-20 20:00:00
   *Ergebnis=>Es gibt Doppelarbeit(true)
   *
   * @param start1 Beginn der Periode 1
   * @param end1 Ende der Periode 1
   * @param start2 Beginn der Periode 2
   * @param end2 Ende der Periode 2
   * @Wenn true dupliziert, wird true zurückgegeben
   */
  def isOverlapped(start1: LocalDateTime, end1: LocalDateTime, start2: LocalDateTime, end2: LocalDateTime): Boolean =
    !start2.isAfter(end1) && !end2.isBefore(start1)

  /**
   *Überprüfen Sie, ob doppelte Zeiträume vorhanden sind(LocalDateTime-Version,Ende der Periode Option möglich)
   *Wenn sich die Perioden an einem einzelnen Punkt überlappen, wird auch davon ausgegangen, dass sie sich überlappen.
   * e.g.)
   *Zeitraum 1=> 2020-10-01 10:00:00 ~ 2020-10-10 20:00:00
   *Zeitraum 2=> 2020-10-10 20:00:00 ~ 2020-10-20 20:00:00
   *Ergebnis=>Es gibt Doppelarbeit(true)
   *
   * @param start1 Beginn der Periode 1
   * @param end1Opt Ende von Periode 1(Wenn Keine, der Zielzeitraum von Anfang an)
   * @param start2 Beginn der Periode 2
   * @param end2Opt Ende von Periode 2(Wenn Keine, der Zielzeitraum von Anfang an)
   * @Wenn true dupliziert, wird true zurückgegeben
   */
  def isOverlapped(start1: LocalDateTime, end1Opt: Option[LocalDateTime], start2: LocalDateTime, end2Opt: Option[LocalDateTime]): Boolean =
    end1Opt.fold(true)(!start2.isAfter(_)) && end2Opt.fold(true)(!_.isBefore(start1))

Recommended Posts

Überprüfung der Periodenduplizierung (LocalTime, LocalDate, LocalDateTime)
[Java] Beispiel für eine Überprüfung des Datumszeitraums