-2

I need to determine if a date range is within/cross over other date ranges. For eg:

New start Date 1: 12/01/2015 (mm/dd/yyyy)
New start Date 2: 03/01/2016 --> Throw error message

New start Date 1: 12/01/2016
New start Date 2: 12/01/2017 --> Throw error message

Existing date ranges:

Existing 1: 01/01/2016 - 05/31/2016
Existing 2: 06/05/2017 - 10/31/2017

I should generate an error message if my new dates fall/crossover the existing dates. Here is my existing code (not working as expected):

for (Period p : periodList) {
    if (!(newPeriodStartDate.after(p.getExistingPeriodStartDate())) 
        && !(newPeriodStartDate.before(p.getExistingPeriodEndDate()))) {
            message = "The Period falls between an existing Period: "+p.periodName();
            break;
    }
    if (newPeriodEndDate.after(p.getExistingPeriodStartDate()) 
        && newPeriodEndDate.before(p.getExistingPeriodEndDate())) {
         if (message == null) {
            message = " The Period falls between an existing Period: "+p.getPeriodName();
         }
            break;
    }
}

EDIT

Updated code (still not working). What am I missing:

if (!(newPeriodStartDate.getTime() <= p.getExistingPeriodEndDate().getTime())
                                        && (newPeriodEndDate.getTime() <= p.getExistingPeriodStartDate().getTime())) {
   ...
}

EDIT 2:

This is a duplicate question, but the answer to that question did not fix my issue. The blog post (http://baodad.blogspot.com/2014/06/date-range-overlap.html) helped me fix.

Harry
  • 546
  • 6
  • 22
  • 50

1 Answers1

0

Finally, this worked:

 boolean isOverLapped(Date newStartDate, Date newEndDate, Date existingStartDate, Date existingEndDate) throws NullPointerException{
            if (!((newEndDate.getTime() <= existingStartDate.getTime()) 
               || (newStartDate.getTime() >= existingEndDate.getTime()))) {
                return true;
            } else {
                return false;
            }
        }
Harry
  • 546
  • 6
  • 22
  • 50