2012-01-19 86 views
4
TimeSpan Earlybeforetime = new TimeSpan(); 
Earlybeforetime = earlybefore.Subtract(Convert.ToDateTime(outtime); 

有時會返回負值。如何將價值轉化爲永遠積極的?TimeSpan從負值到負值的差異

+1

可能重複http://stackoverflow.com/questions/8922435/timespan-difference-value-always-positive) – V4Vendetta

回答

14

你可以使用Negate()改變負值轉正

MSDN

如果當前實例的日期和時間比價值較早, 該方法返回一個表示時間間隔對象負時間 範圍。也就是說,所有非零屬性的值(例如 Days或Ticks)都是負值。

所以,你可以調用取決於求反方法在其值越大,並取得了積極的Timespan

說我們有startDateendDate結束日期比的startDate以上),所以當我們做 startDate.Subtract(endDate)我們會得到一個負的TimeSpan。所以根據這個檢查你可以轉換負值。所以,如果你outtime是超前的earlybefore它會給你一個負時間跨度

編輯

請檢查TimeSpan這應該給你絕對值總是

Earlybeforetime.Duration()

+0

我無法理解請解釋我或在這裏給出一些示例代碼 –

+0

有時我得到正值也假設我將使用Negate()意味着正值變爲負值。需要我。我只是希望所有的回報值都是正面的。 –

+0

@ user1065029擴大了一點,希望這可以幫助你 – V4Vendetta

7
Duration()

當你的早期時間早於時,返回負值。 如果你想有兩個時間點之間的絕對的「距離」,你可以使用TimeSpan.Duration方法,e.g:

TimeSpan first = TimeSpan.FromDays(5); 
TimeSpan second = TimeSpan.FromDays(15); 
TimeSpan final = first.Subtract(second).Duration(); 


Console.WriteLine(final); 

此方法將返回絕對時間跨度值。

+0

謝謝朋友..我得到了結果.. –

0
var startTime = new TimeSpan(6, 0, 0); // 6:00 AM 
var endTime = new TimeSpan(5, 30, 0); // 5:30 AM 
var hours24 = new TimeSpan(24, 0, 0); 
var difference = endTime.Subtract(startTime); // (-00:30:00) 
difference = (difference.Duration() != difference) ? hours24.Subtract(difference.Duration()) : difference; // (23:30:00) 

還可以添加日期之間的區別,如果我們比較兩個不同的日期時間的24小時內new TimeSpan(24 * days, 0, 0)

[入庫時間差異值始終爲正(中