2011-09-15 55 views
5

我有一個TimeSpan類的小問題,它可以解析23:59而不是24:00。解決TimeSpan解析24:00

當然,客戶想要輸入24:00來表示一天結束,而不是23:59或00:00,因爲00:00表示一天的開始。

目前我的代碼解析結束時間,像這樣:

if (!TimeSpan.TryParse((gvr.FindControl("txtTimeOff") as TextBox).Text, out tsTimeOff)) 
{ 
    this.ShowValidationError(String.Format("Please enter a valid 'Time Off' on row '{0}'.", gvr.RowIndex + 1)); 
    return false; 
} 

最新最好的解決辦法出現這種情況?

編輯:(方案1)

if ((gvr.FindControl("txtTimeOff") as TextBox).Text == "24:00") 
{ 
    tsTimeOff = new TimeSpan(24, 0, 0); 
} 
else 
{ 
    if (!TimeSpan.TryParse((gvr.FindControl("txtTimeOff") as TextBox).Text, out tsTimeOff)) 
    { 
     this.ShowValidationError(
      String.Format("Please enter a valid 'Time Off' on row '{0}'.", gvr.RowIndex + 1)); 
     return false; 
    } 
} 

編輯:(溶液2)

string timeOff = (gvr.FindControl("txtTimeOff") as TextBox).Text; 

if (!TimeSpan.TryParse(
     timeOff == "24:00" ? "1.00:00:00" : timeOff 
     , out tsTimeOff)) 
{ 
    this.ShowValidationError(
     String.Format("Please enter a valid 'Time Off' on row '{0}'.", gvr.RowIndex + 1)); 
    return false; 
} 
+3

你可以簡單地處理字符串「24:00」作爲特例。 – codymanix

+0

@codymanix - t hanks,我要去嘗試兩個選項建議 – WraithNath

回答

7

嘗試這樣的事情

textBox = (TextBox) gvr.FindControl ("txtTimeOff"); 

TimeSpan.TryParse (textBox.Text == "24:00" 
         ? "1.00:00" 
         : textBox.Text, 
        out tsTimeOff) 
+0

@ Yahia-謝謝,我要去嘗試兩個選項建議 – WraithNath

+1

謝謝,我已經添加了這兩個解決方案的問題。 – WraithNath

4

一般來說,System.TimeSpan類是不適合代表「時間點」,而是顧名思義,是時間或持續時間的「跨度」。如果你可以重構你的代碼來使用System.DateTime,或者更好的System.DateTimeOffset,那將是最好的解決方案。如果這是不可能的,Yahia的其他答案是你最好的選擇:)

+0

謝謝,我使用的時間跨度作爲開始時間也是一個時間跨度,然後即時獲得兩者之間的小時數。 – WraithNath

+0

'TimeSpan'是表示一天中某個時間的正常.NET方式 - 這是一個每天重複的時間點,或者與日期結合時只有完全定義的時間點。例如。 'DateTime.TimeOfDay'。 –

+0

@JonHanna yep在語義上略有不同,在這種情況下,您將一天的時間表示爲從午夜開始的偏移量 - 這可以用時間跨度(例如午夜加8小時)完美表示。爲了表示一個實際的時間點,必須像你說的那樣將它與'DateTime'結合起來。 – MattDavey

4

老實說,最好的解決辦法是告訴你的客戶,24:00不是一個有效的小時,他應該使用0:00。我從來沒有見過從23:59到24:00的時鐘跳躍。

但如果你堅持......看看下面的SO問題也有同樣的問題,幷包含了一些可能的解決方案:

Parsing times above 24 hours in C#

+0

謝謝,我知道你的意思。只是想看看是否有一個簡單的工作。我必須盡力向客戶提供他們想要的東西! :) – WraithNath

+0

告訴客戶他們想要什麼! ;)hehe – MattDavey

+0

告訴客戶他的建議可能不是最佳的,並建議採用不同的方法。取決於你是如何說出它的;) –