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

C# 如何在C语言中获得不同日期的总小时数#,c#,datetime,timespan,C#,Datetime,Timespan,这是我现在的问题,我想得到工作的总小时数和分钟数。 示例:2017年1月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:

这是我现在的问题,我想得到工作的总小时数和分钟数。 示例:2017年1月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;
}

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

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

您可以将一个DateTime对象与另一个对象相减,然后使用DateTime类的
.TotalHours
属性来获取小时数。它将为您提供一个表示总小时数的双倍值

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

您可以将一个DateTime对象与另一个对象相减,然后使用DateTime类的
.TotalHours
属性来获取小时数。它将为您提供一个表示总小时数的双倍值

DateTime pin = today, pout = DateTime.Parse(empTime);
double hours = (pout - pin).TotalHours;
它给了我负数

如果从较小的项目中减去较大的项目(即从较旧的时间中减去较新的时间),则会出现这种情况。如果您总是希望将差异视为正数,并且不希望考虑较大的数值,则将属性(如.Hours)的结果包装在(绝对值)中

正如@stuartd所指出的,/和/之间存在差异。确保您使用的是符合您需求的正确版本

它给了我负数

如果从较小的项目中减去较大的项目(即从较旧的时间中减去较新的时间),则会出现这种情况。如果您总是希望将差异视为正数,并且不希望考虑较大的数值,则将属性(如.Hours)的结果包装在(绝对值)中

正如@stuartd所指出的,/和/之间存在差异。确保您使用的是符合您需要的正确版本。

它应该可以:

            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 =  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();
您希望使用
TotalHours
TotalMinutes
,因为它们将处理其中的分数,而
Hours
Minutes
只返回整数值。对于减法步骤,还需要如上所述交换操作数的顺序



您希望使用
TotalHours
TotalMinutes
,因为它们将处理其中的分数,而
Hours
Minutes
只返回整数值。对于减法步骤,还需要如上所述交换操作数的顺序

它给我的是负数。
您应该使用
TotalHours
(或
TotalMinutes
)属性,例如2017年1月11日7:00至22:00,它为我提供了正确的总小时数和分钟数。但是从1月11日晚上10点到1月12日早上7点,出现了错误。@stuartd timespan中的何处?
它给我提供了负数。
您应该使用
TotalHours
(或
TotalMinutes
)属性,例如2017年1月11日7:00到22:00,它为我提供了正确的总小时数和分钟数。但是从1月11日晚上10点到1月12日早上7点,出现了错误。@stuartd时间跨度中的什么地方?这给了我16个小时的时间差。@Denver-计算机不会说谎或出错,如果16个时间跨度中的日期之间的时间差是
.Hours
,那么时间跨度中就有16个小时。检查您的逻辑并检查实际的
DateTime
实例,以确保它们确实是您所认为/假设的。@Denver-还检查
DateTime
实例组件,从
DateTimeKind.Utc
中减去值为
DateTimeKind.Local
的实例(例如)这就是为什么它给了我16小时的时间,因为它从晚上10点算到早上7点,我想念昨天的时间,我在这里看到了。谢谢你的想法。math.abs完美地去除负片。我给这个+1这个给我16小时的时间差。@Denver-计算机不会说谎或出错,如果你的日期之间的时间差是16小时,那么时间差是16小时。检查您的逻辑并检查实际的
DateTime
实例,以确保它们确实是您所认为/假设的。@Denver-还检查
DateTime
实例组件,从
DateTimeKind.Utc
中减去值为
DateTimeKind.Local
的实例(例如)这就是为什么它给了我16小时的时间,因为它从晚上10点算到早上7点,我想念昨天的时间,我在这里看到了。谢谢你的想法。math.abs完美地去除负片。我给这个a+1我如何才能添加日期和时间?除非您正在寻找时间跨度的终点,否则将日期添加到时间跨度没有多大意义。你应该想要的是spanMe.TotalMinutes();我将选择这个作为答案,因为我制作的代码与此类似。我如何添加日期和时间?将日期添加到timespan没有多大意义,除非您正在寻找时间跨度的结束。你应该想要的是spanMe.TotalMinutes();我将选择这个作为答案,因为我做的代码与此类似。