超过24小时的比较时间

时间:2016-12-21 15:27:18

标签: c# asp.net timespan

我有一个TimeSpan字段,可以增加在某些事情上花费的时间。例如,时间可能是33小时,因此格式为33:56:00

我想将这个与10小时进行比较来计算完成了多少小时。

TimeSpan totalActualHours = new TimeSpan(0, 0, 0, 0, 0);
if (totalActualHours > TimeSpan.Parse(txtEstimateHrs.Text))
{
     tmpOverHours = totalActualHours.Subtract(TimeSpan.Parse(txtEstimateHrs.Text));
} 

但是,由于totalActualHours超过24小时,格式就像1.09:56:00而不是33:56:00。所以txtEstimateHrs.Text等于10,我想看看33:56:00是否更大,如果是,那么它会有多少小时呢?

所以代码比较if(1.09:56:00> 10.00:00:00)所以它永远不会进入if语句。

此处的问题是Timespan将小时数转换为天数,因此33小时更改为1天9小时,txtEstimateHrs.Text是整数10,并且更改为10天。我需要两个时间格式并且能够比较它们

3 个答案:

答案 0 :(得分:0)

我不确定我是否了解您的要求,但您可以使用TimeSpan.Compare()方法。

var t1 = new TimeSpan(33, 21, 12);
var t2 = new TimeSpan(10, 0, 0);

if (TimeSpan.Compare(t1, t2) > 0)
{
    Console.WriteLine(t1.ToString() + " is longer");
}

修改

如果可以正确创建Timespan对象,上面的代码将正常工作。如果您使用hh:mm:ss格式的字符串,则需要拆分它们并调用正确的Timespan构造函数。如下所示:

public static TimeSpan ConvertStringToTimeStamp(string s)
        {
            // add checks for input like >0, not null or empty

            var split = s.Split(':');
            TimeSpan ts;

            switch (split.Length)
            {
                case 3:
                    ts = new TimeSpan(int.Parse(split[0]),    // hours
                                       int.Parse(split[1]),   // minutes
                                       int.Parse(split[2]));  // seconds                            // seconds);
                    break;
                case 2:
                    ts = new TimeSpan(int.Parse(split[0]),    // hours
                                       int.Parse(split[1]),    // minutes
                                       0);                     // 0 seconds
                    break;
                case 1:
                    ts = new TimeSpan(int.Parse(split[0]),    // hours
                                       0,                     // 0 minutes
                                       0);                    // 0 seconds
                    break;
                default:
                    throw new Exception("Invalid Input");

            }

            return ts;
        }

答案 1 :(得分:0)

您只需使用适当的格式正确构造时间跨度对象。在您的情况下,您可以选择

  

小时,分钟

     

日,小时,分钟,秒,毫秒

示例代码:

案例1

TimeSpan tmpOverHours;
TimeSpan totalActualHours = new TimeSpan(33, 56, 0);
TimeSpan hoursToCompare = new TimeSpan(int.Parse(txtEstimateHrs.Text), 0, 0);

if (totalActualHours > hoursToCompare)
{
    tmpOverHours = totalActualHours.Subtract(hoursToCompare); 
}

案例2

TimeSpan tmpOverHours;
TimeSpan totalActualHours = new TimeSpan(0, 33, 56, 0, 0);
TimeSpan hoursToCompare = new TimeSpan(0, int.Parse(txtEstimateHrs.Text), 0, 0, 0);

if (totalActualHours > hoursToCompare)
{
    tmpOverHours = totalActualHours.Subtract(hoursToCompare); 
}

答案 2 :(得分:0)

当你这样做时,你似乎遇到了解析错误:

Crypt  File  Math  Net  System

如果文本为“10”,则解析方法会将该值解释为天。

因此,您可以将代码更改为:

TimeSpan.Parse(txtEstimateHrs.Text)

将文本框中的数字解析为int并使用它来创建一个正确具有小时而非天数的TimeSpan。

编辑:在旁注中,不要解析文本两次,最好使用变量来保存已解析的TimeSpan然后使用它。