2011-07-20 96 views
3

我已經創建了下面2週數據的時間跨度:差未能返回預期

TimeSpan currentTs = TimeSpan.FromSeconds(43995); //12:13:15 
TimeSpan towTime = TimeSpan.FromSeconds(303072); //12:11:12 

我試圖找到分鐘(對差分我給它傳遞秒,它看起來像他們在不同的日子)。我希望大約有2分鐘的差距,但實際上,我得到-57分鐘。

int timeDifference = (int)currentTs.Subtract(towTime).Minutes; 

有人可以解釋我做錯了什麼嗎?

回答

4

如果你只是尋找分鐘(不包括天數,小時或秒)之間的區別,那麼你可以使用

double timeDifference = currentTs.Minutes - towTime.Minutes; // 2 

這只是雖然分鐘成分的差異。正如其他人所說,這些時間相隔3天,所以TimeSpan可能並不理想。

或者,如果你想秒被包括在內,你可以使用

TimeSpan minutes1 = new TimeSpan (0, currentTs.Minutes, currentTs.Seconds); 
TimeSpan minutes2 = new TimeSpan (0, towTime.Minutes, towTime.Seconds); 

double timeDifference = minutes1.TotalMinutes - minutes2.TotalMinutes // 2.05; 
+0

感謝大家的信息。我會檢查爲什麼時間會這麼多天。理論上,他們應該是同一天,但誰知道。 – Jason

2

您正在尋找TotalMinutes財產不Minutes - 後者僅僅是時間差的分鐘部分,前者是在分數分鐘表示了充分的時間差:

double timeDifference = currentTs.Subtract(towTime).TotalMinutes; 

也更容易讀的是:

double timeDifference = (currentTs - towTime).TotalMinutes; 
+0

如果我總分鐘數,它具有箱作爲-4317 INT爲TimeDifference =(int)的currentTs.Subtract(towTime).TotalMinutes; – Jason

+0

@Jason那就是時間差,如果你看看你逝去的什麼,你確定你是不是在找'DateTime',如果你想在不同的日子比較時? – BrokenGlass

+0

@Jason:43995 - 303072 = -259077,-259077/60 = -4317.95 – BrokenGlass

0

currentTime小於towTime(你似乎缺少一個數字)。

+0

我通過的值是正確的。這正是我的程序所看到的。 – Jason

1

因爲第二個時間跨度不是12時11分12秒,它的3:12:11:12。

所以你會得到一個否定的結果,如果你做了總分鐘數(因爲它表示類似-2天,57分57秒的東西),所以你會得到一個負數的結果......因爲你只是要求分鐘和不是TotalMinutes,你剛剛得到-57。

3

我猜你要完全忽略的事實,時間由3天左右不同。在這種情況下,如果採取由86400(以秒爲單位每天數)分割後的餘數,並傳遞到TimeSpan.FromSeconds,你應該希望得到你想要的東西:

TimeSpan currentTs = TimeSpan.FromSeconds(43995 % 86400); //12:13:15 
TimeSpan towTime = TimeSpan.FromSeconds(303072 % 86400); //12:11:12, ignoring the 3 days. 
double timeDifference = (currentTs - towTime).TotalMinutes; 

我得到的值timeDifference as 2.05當我試過這個。

當然,如果currentTstowTime更早(可能是因爲它們之間是午夜時分),那麼時差會出現負值。如果您仍然要計算兩者之間的分鐘數,假設currentTs總是在towTime之後,那麼如果計算結果爲負數,則需要添加1440(一天中的分鐘數)至timeDifference

if (timeDifference < 0) 
{ 
    timeDifference += 1440; 
}