2回の間に何分あるかを計算する


86

アプリケーションに開始時刻と終了時刻を保持するdatagridviewがあります。この2つの時間の間の分数を計算したいと思います。これまでのところ私は持っています:

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

しかし、Timespanコンストラクターに無効な引数を使用していると表示されているため、最後の行はコンパイルされません。2回の間の分数を計算する方法についてはかなり調査しましたが、少しレンガの壁にぶつかっています。誰かが私の目的を達成するための最良の方法について私にアドバイスできますか?

編集/

今私のコードは次のとおりです:

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

しかし、2行目に無効なキャストが表示されます。varFinishとvarValueはどちらも、たとえば10:00と8:00などの時間です。では、なぜ彼らがDateTime型にキャストしないのかわからないのですか?


varFinishが文字列の場合、文字列をDateTimeにキャストすることはできません。DateTime.Parse(...)を使用する必要があります。それでも、varFinishに日付がない場合は、今日の日付を意味します。
ジム

回答:


160

これを試して

DateTime startTime = varValue
DateTime endTime = varTime

TimeSpan span = endTime.Subtract ( startTime );
Console.WriteLine( "Time Difference (minutes): " + span.TotalMinutes );

編集:「span.Minutes」を試行している場合、これはタイムスパン[0〜59]の分のみを返します。この間隔からのすべての分の合計を返すには、「span.TotalMinutes」を使用します。


2
これは良い答えですが、スパンに0が与えられます。2つの時間の差が1時間より大きい場合(つまり60分以上)の分
Asif Mehmood 2017年

6
@MalikAsif。これを61分のスパンで試したところ、予想どおり1時間1分でした。スパンが正確に60分だった場合、はい、分はゼロになります。考えていましたTotalMinutes()か?
ジム

17
違います。span.Minutes数値[0..59]を返します。span.TotalMinutes代わりに使用
Sten Petrov 2017

2
これは受け入れられた答えであってはなりません。他のコメントによると、それは質問を適切に解決しません。
tjmoore 2017年

2
@tjmooreフィードバックをありがとう、私はあなたに同意します。私は2012年1月に元の質問に回答し、その後質問を編集しました。おそらく、元の編集されていない質問が行われてから5年後にほとんどの人が回答を読んでいるため、この回答に反対票を投じることがあります。
ケイン


9

質問コードで、TimeSpan.FromMinutes誤って使用しています。次のメソッド署名を提供するTimeSpan.FromMinutesのMSDNドキュメントを参照してください。

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;


1

endTimeとstartTimeの差が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; 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.