2016-12-21 163 views
1

我有一個TimeSpan字段,它將花費在某物上的時間相加。例如,時間可能是33小時,所以格式是33:56:00比較超過24小時的時間

我想比較一下這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語句。

這裏的問題是Timespan將小時轉換爲天,因此33小時更改爲1天和9小時,而txtEstimateHrs.Text是整合10,並且更改爲10天。我需要兩個時間都是小時格式並且能夠比較它們

+0

我不太確定這是否重複,但問題並不十分清楚。也許你可以試着用另一個例子來解釋它。您可以比較大於24小時的時間段。 –

+0

@TimSchmelter請參閱我的編輯 – user123456789

+0

只是做'tmpOverHours =(int)(totalActualHours.TotalHours - int.Parse(txtEstimateHrs.Text))' – Innat3

回答

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; 
     } 
+0

請參閱我的問題的編輯我希望我問題更清楚 – user123456789

+0

不比較解決您的問題? – NoviceProgrammer

+0

更新了答案。 – NoviceProgrammer

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); 
} 
0

看來你有當你正在做一個解析錯誤:

TimeSpan.Parse(txtEstimateHrs.Text) 

文本是否爲「10」的解析方法解釋值作爲天。

所以,你可以的代碼更改爲類似:

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

這將解析數在文本框中爲一個int並用它來創造出正確的有幾個小時而不是天數時間跨度。

編輯:在旁註中,不要兩次解析文本,最好使用一個變量來保存解析的TimeSpan,然後使用它。