CodeMonkey
CodeMonkey

Reputation: 12424

Restrict DateTime with a minimum date and time (not fall below 00:00)

I am using DateTime and it's methods like DateTime.AddMinutes etc.

Is there a way to make DateTime throw an Exception when adding a negative number of minutes/seconds etc that make the time fall beneath 00:00 and not turn the time to 23:59?

Upvotes: 0

Views: 258

Answers (2)

terrybozzio
terrybozzio

Reputation: 4542

You can try a extension method like so:

    public static class MyDateTimeChecker
    {
        public static bool CheckTime(this DateTime dt, int minutes)
        {
            if (dt.Day > dt.AddMinutes(minutes).Day)
                return false;
            else
                return true;
        }
    }

I placed Day since in your question you wanted to know if it would fall bellow 00:00 or back to the previous day at 23:59,so this is one way to go. Then in your code you can use it like this:

   DateTime dt = DateTime.Now;
   if(dt.CheckTime(-1440))
   {
      //if true your negative number was in range
      //so use it if you like.
   }
   else
   }
      //oops too much
   }

Upvotes: 1

Hans
Hans

Reputation: 2910

At Domain Model Level

At the domain model you could a Decorator/Wrapper class. Just use a class that has a private DateTime object and pass through every method of that object that remains unaltered and implement those that are altered, essentially just by writing:

public bool Equals(DateTime dt){
    return this.dateTime.Equals(DateTime dt);
} 

There are however a couple of issues with this:

  • In the above example you might want to compare your DateTime object with itself, but that won't be possible.
  • DateTime has certain attributes eg. its serializable that you may lose until adding a fair bit of time to this.

At Controller Level

Assuming you are implementing this in an applicatino with MVC setup, you probably have some validation within your controller. That should be able to handle these cases. I'd recommend this approach, as you can reject any case where the Date part of the datetime does not match or is less than the original date.

Upvotes: 1

Related Questions