How to Get the Time Difference Between Two Datetime Objects Using C#

How do I get the time difference between two DateTime objects using C#?

The following example demonstrates how to do this:

DateTime a = new DateTime(2010, 05, 12, 13, 15, 00);
DateTime b = new DateTime(2010, 05, 12, 13, 45, 00);
Console.WriteLine(b.Subtract(a).TotalMinutes);

When executed this prints "30" since there is a 30 minute difference between the date/times.

The result of DateTime.Subtract(DateTime x) is a TimeSpan Object which gives other useful properties.

Showing Difference between two datetime values in hours

I think you're confused because you haven't declared a TimeSpan you've declared a TimeSpan? which is a nullable TimeSpan. Either remove the question mark if you don't need it to be nullable or use variable.Value.TotalHours.

Getting time difference between two values

Use TimeSpan class, and Subtract method of DateTime.

        DateTime t1 = Convert.ToDateTime(textBox1.Text);
DateTime t2 = Convert.ToDateTime(textBox2.Text);
TimeSpan ts = t1.Subtract(t2);

Format Diffrence time between two DateTime objects

try this.

EndTime.Subtract(StartDate).ToString("hh\\:mm\\:ss");

Acccording to MSDN: https://msdn.microsoft.com/en-us/library/ee372287(v=vs.110).aspx

The custom TimeSpan format specifiers do not include placeholder separator symbols, such as the symbols that separate days from hours, hours from minutes, or seconds from fractional seconds. Instead, these symbols must be included in the custom format string as string literals. For example, "dd.hh:mm" defines a period (.) as the separator between days and hours, and a colon (:) as the separator between hours and minutes.

Therefore, to use ':' as the separator, you must include '\' before it.

How to get Difference hours Between two date

You're subtracting component-wise (i.e. "this hour-of-day minus that hour-of-day, this minute-of-hour minus that minute-of-hour"). Don't do that - it won't work if the current hour-of-day is earlier than the hour-of-day of lastDate, or the same for minute-of-hour - you get a negative value, exactly as you've seen.

Instead, subtract one DateTime from another to get a TimeSpan and use that single TimeSpan for all the components:

DateTime lastDate = DateTime.Parse("2/12/2015 11:24:23 AM");
TimeSpan difference = DateTime.Now - lastDate;
int days = difference.Days;
int hours = difference.Hours;
int minutes = difference.Minutes;

That will still be negative if lastDate is after DateTime.Now, of course.

Note that this will give you a result which is meaningful if you display all three components. For example, it might give you "2 days, 3 hours and 10 minutes". If instead you want to represent the same TimeSpan as "2.194 days" or "51.166 hours" or "3160 minutes" then you can use TotalDays, TotalHours and TotalMinutes.

If you always want a positive TimeSpan - the equivalent of Math.Abs but for TimeSpan you can just use TimeSpan.Duration():

TimeSpan difference = (DateTime.Now - lastDate).Duration();

Calculate difference between two dates (number of days)?

Assuming StartDate and EndDate are of type DateTime:

(EndDate - StartDate).TotalDays

How to accurately get difference between two DateTime object in Years [Closed, use NodaTime]

I'm biased, but I'd use Noda Time:

var date1 = new LocalDate(1988, 3, 29);
var date2 = new LocalDate(2013, 1, 23); // See note below
var years = Period.Between(date1, date2, PeriodUnits.Years).Years;

Basically the BCL doesn't provide a hugely easy way of working with things like this - you really don't want a TimeSpan, because it's not anchored to a specific start/end point. You can subtract one Year value from another and then adjust if it does the wrong thing, but it's a bit icky.

Now in your original code, you used DateTime.Now. In Noda Time, we treat a clock as a dependency, with SystemClock.Instance being the normal production implementation. An IClock doesn't know about time zones - it just knows the current instant in time - so you have to say which time zone you're interested in. For example:

var today = clock.Now.InZone(zone).LocalDateTime.Date;

I know this seems long-winded, but it's isolating all the different conversions to make it all more explicit. (I may introduce a Date property on ZoneDateTime to reduce this slightly.)



Related Topics



Leave a reply



Submit