Solved

check on overlapping dates

Posted on 2010-08-17
6
650 Views
Last Modified: 2013-11-27
I have an object which has two date values begin date and end date.  In fact there are multiple objects with begin date and end date. what i want to do is check that the dates of this objects dont overlap with each other. so for example object[0]'s begin date and end date is 08/16/2010 - 08/30/2010 and for object [1] begin date and end date is 08/20/2010-09/30/2010. if this the case then i wan to throw and error message.

can someone tell me how to do this in C#.

0
Comment
Question by:pratikshahse
6 Comments
 
LVL 27

Accepted Solution

by:
nmarun earned 250 total points
ID: 33457462
Here's a snippet that worked for me.Arun
public class Dummy

{

    public int Id { get; set; }

    public DateTime StartDate { get; set; }

    public DateTime EndDate { get; set; }

}



private static void CheckOverlapDates()

{

    List<Dummy> dummies = new List<Dummy>();

    dummies.Add(new Dummy

                    {

                        Id = 1,

                        StartDate = new DateTime(2010, 1, 1),

                        EndDate = new DateTime(2010, 1, 10)

                    });

    dummies.Add(new Dummy

                    {

                        Id = 2,

                        StartDate = new DateTime(2010, 1, 8),

                        EndDate = new DateTime(2010, 1, 20)

                    });

    dummies.Add(new Dummy

                    {

                        Id = 3,

                        StartDate = new DateTime(2010, 1, 20),

                        EndDate = new DateTime(2010, 1, 30)

                    });

    dummies.Add(new Dummy

                    {

                        Id = 4,

                        StartDate = new DateTime(2010, 1, 30),

                        EndDate = new DateTime(2010, 2, 10)

                    });

    dummies.Add(new Dummy

                    {

                        Id = 5,

                        StartDate = new DateTime(2010, 2, 10),

                        EndDate = new DateTime(2010, 2, 20)

                    });



    for (int i = 0; i < dummies.Count; i++)

    {

        for (int j = i+1; j < dummies.Count; j++)

        {

            if(dummies[i].EndDate > dummies[j].StartDate)

            {

                Console.WriteLine("object {0} overlaps with object {1}", dummies[i].Id, dummies[j].Id);

            }

        }

    }

}

Open in new window

0
 
LVL 16

Assisted Solution

by:kris_per
kris_per earned 250 total points
ID: 33457663
Logic is:
- if one's start date is within another's start/end dates
- or if one's end date is within another's start/end dates

public bool IsOverlapping()

        {

            List<MyObject> list = new List<MyObject>();



            foreach (MyObject o in list)

            {

                foreach (MyObject i in list)

                {

                    // logic is - if one start date is within another start/end dates

                    // or if one end date is within another start/end dates

                    if( (i.StartDate > o.StartDate && i.StartDate < o.EndDate)

                        || (i.EndDate > o.StartDate && i.EndDate < o.EndDate)

                        || (o.StartDate > i.StartDate && o.StartDate < i.EndDate)

                        || (o.EndDate > i.StartDate && o.EndDate < i.EndDate) )

                    {

                        return true; // yes overlapping

                    }

                }

            }



            return false; // not overlapping

        }

Open in new window

0
 
LVL 16

Expert Comment

by:kris_per
ID: 33457699

Contnuing previous code, If the overlapping is including the dates, then you have to add '=' operator in all comparisons above:
public static bool IsOverlapping()

        {

            List<MyObject> list = new List<MyObject>();



            foreach (MyObject o in list)

            {

                foreach (MyObject i in list)

                {

                    // logic is - if one start date is within another start/end dates

                    // or if one end date is within another start/end dates

                    if( (i.StartDate >= o.StartDate && i.StartDate <= o.EndDate)

                        || (i.EndDate >= o.StartDate && i.EndDate <= o.EndDate)

                        || (o.StartDate >= i.StartDate && o.StartDate <= i.EndDate)

                        || (o.EndDate >= i.StartDate && o.EndDate <= i.EndDate))

                    {

                        return true; // yes overlapping

                    }

                }

            }



            return false; // not overlapping

        }

Open in new window

0
How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

 
LVL 2

Expert Comment

by:Sadrul
ID: 33458755
You should first sort the list in increasing start-date. After that, you can do a linear traversal of the list to figure out if two date-ranges overlap or not. This way, the worst-case running time would be nlog(n), whereas looking in the unsorted list will be n^2.
0
 
LVL 29

Expert Comment

by:anarki_jimbel
ID: 33459291
About sorting (Sadrul's note) - just to remind that sorting also takes some time and has complexity, e.g., n*log(n)
0
 
LVL 2

Expert Comment

by:Sadrul
ID: 33459379
Correct. That is why I note that the overall complexity of the process will also be nlog(n) (sorting takes nlog(n), the linear traversal is n).
0

Featured Post

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

Suggested Solutions

Title # Comments Views Activity
Exception in Log4Net 1 20
As soon as i click a button on the form,it mnimises. 11 20
Create XML 5 34
Achieve json result 2 35
Windows Script Host (WSH) has been part of Windows since Windows NT4. Windows Script Host provides architecture for building dynamic scripts that consist of a core object model, scripting hosts, and scripting engines. The key components of Window…
Real-time is more about the business, not the technology. In day-to-day life, to make real-time decisions like buying or investing, business needs the latest information(e.g. Gold Rate/Stock Rate). Unlike traditional days, you need not wait for a fe…
The viewer will learn how to implement Singleton Design Pattern in Java.
The viewer will be introduced to the technique of using vectors in C++. The video will cover how to define a vector, store values in the vector and retrieve data from the values stored in the vector.

746 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

10 Experts available now in Live!

Get 1:1 Help Now