Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to check if DateTime.Now is between two given DateTimes for time part only?

Tags:

c#

For my app I need to know if Now() is between two values.

The user can set a start- and an end-time so he will not disturbed by a notification (during the night for example).

So if have got two TimePickers (start- and end-time) that the user can set.

Lets say the user sets 22:00 for the StartTime and 07:00 for the EndTime (this would cover the night).

How can I check if the DateTime.Now is between the selected Start and End time?

EDIT: I only want this to work with the Hour and minutes part. So if the user sets the Start and End time this should work for every night.

like image 612
Niels Avatar asked Oct 21 '12 14:10

Niels


People also ask

How can you find the difference in time between two DateTime objects time_1 and time_2?

Subtracting the later time from the first time difference = later_time - first_time creates a datetime object that only holds the difference.

How do I calculate time between two dates in Python?

timedelta() method. To find the difference between two dates in Python, one can use the timedelta class which is present in the datetime library. The timedelta class stores the difference between two datetime objects.


1 Answers

First you need to convert everything to the same units (we'll use TimeSpan), then you need to see whether the start-end times cross midnight, and finally do your comparison based on the results of that check:

// convert everything to TimeSpan TimeSpan start = new TimeSpan(22, 0, 0); TimeSpan end = new TimeSpan(07, 0, 0); TimeSpan now = DateTime.Now.TimeOfDay; // see if start comes before end if (start < end)     return start <= now && now <= end; // start is after end, so do the inverse comparison return !(end < now && now < start); 

Here's a function to do it for you:

bool TimeBetween(DateTime datetime, TimeSpan start, TimeSpan end) {     // convert datetime to a TimeSpan     TimeSpan now = datetime.TimeOfDay;     // see if start comes before end     if (start < end)         return start <= now && now <= end;     // start is after end, so do the inverse comparison     return !(end < now && now < start); } 

You would call it like:

bool silenceAlarm = TimeBetween(DateTime.Now, StartTime.Value, EndTime.Value); 
like image 136
Gabe Avatar answered Sep 20 '22 16:09

Gabe