2015-01-06 102 views
-2

我想知道如何獲得2300到0100之間的持續時間,應該是0200,但它返回2200.我正在使用Xamarin.Forms處理應用程序,並使用兩個返回TimeSpan的TimePick。計算2300到0100之間的時間間隔

private TimeSpan CalculateDuration() 
{ 
    var result = timePickerEnd.Time.Subtract(timePickerStart.Time); 
    return result.Duration(); 
} 

只要startTime小於endTime,一切正常。但是如果某人在2300開始並在0100結束,它將返回22.我想知道是否有人有一些指導我應該如何攻擊這個問題。

+4

'timePickerStart'和'timePickerEnd'的類型是什麼,因爲它們不是'DateTime'(它沒有屬性'Time')? (可以用'DateTime'工作:http://rextester.com/WRYIC93965) – Jamiec

+4

自從我離開小學以來,我一直覺得23小時減1小時是22小時,C#是正確的。 –

+0

該類型是TimeSpan,因爲我使用Xamarin.Forms中的TimePicker。如果startTime是0100,endTime是2300,則持續時間是2200.那是正確的。但是,如果startTime是2300,endTime是0100,則持續時間仍然是2200.如果持續時間方法不是,則它將是-2200。這就是爲什麼我問,如果有人有一些提示我如何解決這個問題。 – user2236165

回答

2

你有特定的規則,你必須實現他們:

var ts1 = timePickerStart.Time; 
var ts2 = timePickerEnd.Time; 
var difference= ts2.Subtract(ts1); 
if(ts1 > ts2) 
{ 
    difference= difference.Add(TimeSpan.FromHours(24)); 
} 
return difference; 

因爲你已經失敗規則闡明(我已經在上面猜測)是,「如果開始時間是更大那麼它們應該被解釋爲在連續的日子裏發生「 - 這絕不是假設系統應該做出的通用