How to Handle Actual Time with Durations in C#?

.net, c#, date-math, datetime, time

Solution

It's not at all clear what you mean by "is greater than startHour"... but taking

TimeSpan startHour = new TimeSpan(12, 25, 43);
if (endHour.TimeOfDay > startHour)
{
    ...
}

... works pretty simply.

By all means add argument checking to make sure that you don't specify a value for startHour which is `<` 0 or `>` 23 hours, but that's all pretty easy.

.NET's date and time API is quite primitive (even in 3.5) compared with, say, Joda Time - but in this particular case I think it's not too bad.

Problem

What's the preferred approach to compare a complete `DateTime` instance with an hour, minute, and second which represents an actual time of day, with the ability to operate over those triplets (eg `add` hours, minutes seconds..)? My current approach is something like ``` DateTime startHour = new DateTime(1900,1,1,12,25,43); DateTime endHour = new DateTime(1900,1,1,13,45,32); // I need to, say, know if a complete DateTime instance // is later than startHour plus 15 minutes DateTime now = DateTime.Now(); startHour = startHour.addMinutes(15); if (now.CompareTo(new DateTime(now.Year, now.Month, now.Day, startHour.Hour, startHour.Minute, startHour.Second)) > 0) { //I can do something now } ``` This is very cumbersome and even failure prone. `TimeSpan`s are not a solution as far as I can see, because they represent spans and aren't bound by the 24 hours limit (a `TimeSpan` of 56 hours 34 minutes is valid.) What's the preferred approach for this type of calculations?

Original source