我有一个时间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;
}