2012-01-26 92 views
43

我在我的應用程序,它擁有開始和結束時間一個DataGridView之間。我想計算這兩次之間的分鐘數。到目前爲止,我有:計算多少分鐘有兩次

var varFinish = tsTable.Rows[intCellRow]["Finish Time"]; 
TimeSpan varTime = (DateTime)varFinish - (DateTime)varValue; 
int intMinutes = TimeSpan.FromMinutes(varTime); 

但最後一行將無法編譯,因爲它說我使用的參數無效的時間跨度構造函數。我已經研究了很多關於如何計算兩次之間的分鐘數的問題,但是我碰到了一堵磚牆。有人可以告訴我最好的方式來實現我的目標。

編輯/

現在我的代碼如下:

var varFinish = tsTable.Rows[intCellRow]["Finish Time"]; 
TimeSpan varTime = (DateTime)varFinish - (DateTime)varValue; 
int intMinutes = (int)varTime.TotalMinutes; 

但我得到的第二行的無效轉換。 varFinish和varValue都是時間的例如10:00和8:00說。所以不知道爲什麼他們不會投入輸入DateTime?

+0

如果varFinish是一個字符串,你可以不投一個字符串轉換爲日期時間。你需要使用DateTime.Parse(...)。即使那樣,如果在varFinish中沒有日期,它將意味着今天的日期。 – Jim

回答

70

試試這個

DateTime startTime = varValue 

DateTime endTime = varTime 

TimeSpan span = endTime.Subtract (startTime); 
Console.WriteLine("Time Difference (seconds): " + span.Seconds); 
Console.WriteLine("Time Difference (minutes): " + span.Minutes); 
Console.WriteLine("Time Difference (hours): " + span.Hours); 
Console.WriteLine("Time Difference (days): " + span.Days); 
+2

這是一個很好的答案,但給* 0 *上span.Minutes時兩個時間之間的區別是大於1小時(即60分鐘或更多) –

+6

@MalikAsif。我只用了61分鐘的時間就嘗試過了,如預期的那樣,我獲得了1小時1分鐘的時間。如果跨度恰好是60分鐘,那麼是的,分鐘就是零。你在想'TotalMinutes()'嗎? – Jim

+1

是的@Jim,就是我剛纔所說的。提到的一點是,問題是關於總分鐘數。 –

8

在你quesion代碼使用的是TimeSpan.FromMinutes不正確。請參閱MSDN Documentation爲TimeSpan.FromMinutes,這給出了以下方法簽名:

public static TimeSpan FromMinutes(double value) 

因此,下面的代碼將無法編譯

var intMinutes = TimeSpan.FromMinutes(varTime); // won't compile 

相反,你可以使用TimeSpan.TotalMinutes屬性來執行此算術。例如:

TimeSpan varTime = (DateTime)varFinish - (DateTime)varValue; 
double fractionalMinutes = varTime.TotalMinutes; 
int wholeMinutes = (int)fractionalMinutes; 
30
double minutes = varTime.TotalMinutes; 
int minutesRounded = (int)Math.Round(varTime.TotalMinutes); 

TimeSpan.TotalMinutes:此實例所表示的分鐘總數。

+2

是TotalMinutes是我一直在尋找的。非常感謝你^ _^ –

2

這有什麼錯varTime.TotalMinutes? :)

1

如果結束時間和開始時間之間的差值大於或等於60分鐘,語句:endTime.Subtract(startTime).Minutes;將始終返回(minutesDifference % 60)。很明顯,當我們只談論分鐘時(這裏不是小時),這是不期望的。
這裏有一些方法,如果你想獲得total number of minutes(在不同的類型轉換):

// Default value that is returned is of type *double* 
double double_minutes = endTime.Subtract(startTime).TotalMinutes; 
int integer_minutes = (int)endTime.Subtract(startTime).TotalMinutes; 
long long_minutes = (long)endTime.Subtract(startTime).TotalMinutes; 
string string_minutes = (string)endTime.Subtract(startTime).TotalMinutes;