我有一个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天。我需要两个时间格式并且能够比较它们
答案 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然后使用它。