Denver
Denver

Reputation: 147

How to get the total hours with different dates in C#

This is my problem now, i want to get the total hours and mins of work. example from jan. 11 2017 22:00 to Jan. 12 2017 7:00. so far i have it only work when the end date is not change

DateTime pin = today, pout = DateTime.Parse(empTime);
TimeSpan spanMe = pout.Subtract(pin);

spanMe.Hours
spanMe.Minutes

it gives me negative numbers.

Upvotes: 0

Views: 7343

Answers (5)

Igor
Igor

Reputation: 62213

it gives me negative numbers.

That is expected if you subtract a larger item from a smaller item (ie. subtracting a more recent time from an older time). If you always want to see the difference as a positive number and do not want to take into account which is larger then wrap the result of the properties (like .Hours) in Math.Abs (absolute value).

var hours = System.Math.Abs(spanMe.Hours);
var minutes = System.Math.Abs(spanMe.Minutes);

Also as pointed out by @stuartd there is a difference between Hours/Minutes and TotalHours/TotalMinutes. Make sure you are using the correct one for your needs.

Upvotes: 3

CDove
CDove

Reputation: 1950

DateTime pin = today, pout = DateTime.Parse(empTime);
TimeSpan spanMe = pin.Subtract(pout);

var hours = spanMe.TotalHours;
var minutes = spanMe.TotalMinutes;

You want to use TotalHours and TotalMinutes as these will handle fractions thereof, versus Hours and Minutes which return only whole values. You also need to swap the order of your operands as above for the subtraction step.

Upvotes: 0

jdweng
jdweng

Reputation: 34421

It should work :

            DateTime pin =  DateTime.Parse("jan 11 2017 22:00");
            DateTime pout = DateTime.Parse("Jan 12 2017 7:00");

            TimeSpan spanMe = pout.Subtract(pin);

            Console.WriteLine("Hours : {0}, Minutes : {1}", spanMe.Hours, spanMe.Minutes);

            Console.ReadLine();

Upvotes: 1

sujith karivelil
sujith karivelil

Reputation: 29006

You can subtract one DateTime Object from another, and then use .TotalHours property of the DateTime class to get the number of hours. It will give you a double value representing the total hours.

DateTime pin = today, pout = DateTime.Parse(empTime);
double hours = (pout - pin).TotalHours;

Upvotes: 0

dovid
dovid

Reputation: 6452

if you know what is the latest date, you need arrange it accordingly. If not, you can not multiply by -1:

double GetHouers(DateTime one, DateTime another)
{
    var diff = (one - another).TotalHours;
    return diff > 0 ? diff : diff * -1;
}

Upvotes: 0

Related Questions