比较超过24小时的时间



我有一个时间pan字段,可以增加花费在某物上的时间。例如,时间可能为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是否更大,如果是这样,那么几个小时?

因此,代码正在比较(1.09:56:00> 10.00:00:00),因此它永远不会进入IF语句。

这里的问题是将小时转换为几天的时间潘,因此33小时的变化为1天和9小时,而txtEstimateHrs.Text是Integar 10,并且更改为10天。我两次都需要以小时的格式进行比较

您只需要使用适当的格式正确构建时间pan对象即可。在您的情况下,您可以在

之间进行选择

小时,最低秒

白天,小时,最小,秒,毫秒

示例代码:

情况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); 
}

在这样做时,您似乎正在解析错误:

TimeSpan.Parse(txtEstimateHrs.Text)

如果文本为" 10",则解析方法将将值解释为天。

因此,您可以将该代码更改为以下内容:

TimeSpan.FromHours(int.Parse(txtEstimateHrs.Text))

将在文本框中分析数字中的数字,然后使用它来创建一个时间pan,该时间pan正确具有小时数而不是天数。

编辑:在旁注上,请勿两次解析文本,更好地使用变量保存分析的时间板,然后使用它。

我不确定我是否理解您的要求,但是您可以使用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;
        }

最新更新