如何在C#中获取不同日期的总小时数

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

这是我现在的问题,我想获得工作的总时数和分钟数。 来自 jan 的例子。 2017 年 11 月 22:00 至 2017 年 1 月 12 日 7:00。 到目前为止,我只有在结束日期不变时才有效

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

spanMe.Hours
spanMe.Minutes

它给了我负数。

如果你知道最晚的日期,你需要相应地安排。如果不是,则不能乘以-1:

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

您可以从一个 DateTime 对象中减去另一个,然后使用 DateTime class 的 .TotalHours 属性 来获取小时数。它会给你一个代表总小时数的双精度值。

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

it gives me negative numbers.

如果您从较小的项目中减去较大的项目(即从较旧的时间中减去较新的时间),这是预期的。如果您总是希望将差异视为正数并且不想考虑哪个较大,则将属性的结果(如 .Hours)包装在 Math.Abs(绝对值)中。

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

正如@stuartd 所指出的,Hours/Minutes and TotalHours/TotalMinutes 之间存在差异。确保您使用的是满足您需要的正确产品。

它应该有效:

            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();
DateTime pin = today, pout = DateTime.Parse(empTime);
TimeSpan spanMe = pin.Subtract(pout);

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

您想使用 TotalHoursTotalMinutes,因为它们将处理其中的分数,而 HoursMinutes return 仅处理整数值。您还需要像上面那样为减法步骤交换操作数的顺序。