VulcanCCIT
VulcanCCIT

Reputation: 27

Time Math Guidance needed

I have a DateTime object that is 10:00 AM This time represents what time of day a report should be run.

I want to calculate the amount of time remaining from NOW until 10:00 AM

part of my confusion is NOW might be after 10:am or BEFORE 10am,

I keep playing around with TimeSpan, but my results are not quite right... I am sure this is simple, but it is one of those things I have been working of for a few hours and I need a push in the right direction...

I want the timespan object timeTillRun to be correct...here is what I have tried:

{
  DateTime scheduledRun = DateTime.Today.AddHours(_timeToStart);//_timeToStart = 10
  TimeSpan timeTillRun = DateTime.Now - scheduledRun;
}

Upvotes: 0

Views: 698

Answers (2)

Odnxe
Odnxe

Reputation: 644

Try this

        DateTime timeToStart = DateTime.Today.AddHours(10);

        TimeSpan timeTillRun;

        // Checking to see if current time is passed schedule run, if it is then we add a day (this is assuming this is run daily, if days are skipped like weekends for example then this would need some tweaking)
        if (DateTime.Now > timeToStart)
            timeTillRun = DateTime.Now.AddDays(1.0) - timeToStart;
        else
            timeTillRun = DateTime.Today - timeToStart;

        double totalHoursRemaining = timeTillRun.TotalHours; // get total hours remaining
        string prettyRemaining = String.Format("{0} day and {1} hours", timeTillRun.Days, timeTillRun.Hours); // can do some outputting here

Upvotes: 1

cdhowie
cdhowie

Reputation: 169028

This will work... but you need to reverse the order of subtraction:

TimeSpan timeTillRun = scheduledRun - DateTime.Now;

Note that if it's currently after 10AM, timeTillRun will be negative. You will presumably also need to check if the current time is on or after 10AM, then add 10 hours and one day to DateTime.Today to obtain the next run time. Alternatively, you could test if timeTillRun is negative; if so, just add one day to it (timeTillRun += new TimeSpan(1, 0, 0, 0)).

Upvotes: 1

Related Questions