TimeSpanサブトラクト法は、負のタイムスパンを返します
質問
これらの二つのTimeSpanは、24時間形式でデータベースに格納されています。日付なし、唯一のTimeSpan。
Dim r As TimeSpan
Dim tsStart As TimeSpan
Dim tsEnd As TimeSpan
'tsStard is 12:27:30 (pm) this happened first
'tsEnd is 00:10:25 (am) then this happened later
'You can't store 24:10:25 in the column type Time(7)
r = tsEnd.Subtract(tsStart)
R '= -12:17:05
この権利を取得する任意のTimeSpanの方法はありますか?ありがとうございました。
解決
あなたは
tsEnd
が常にtsStart
より後の時点を表しますが、データベースは日付を格納しないことがわかっている場合、エンドがスタート未満であるとき、、あなたは最後まで24時間を追加することによってこの問題を解決することができます(C#のはご容赦構文):
if (tsEnd < tsStart) {
r = tsEnd.Add(new TimeSpan(24, 0, 0)).Subtract(tsStart);
} else {
r = tsEnd.Subtract(tsStart);
}
jballはコメントで述べたように、、これは我々がそうでないかを決定する方法がありませんけれどもtsEnd
は、複数の日で、後になることはありませんことを前提としています。
他のヒント
あなたがのTimeSpanの期間()メソッドを使用している場合は、
、それはあなたの結果が肯定的であることを保証します、どんなにあなたが減算を行うどのような順序ます。
例
Dim r As TimeSpan
Dim tsStart As TimeSpan
Dim tsEnd As TimeSpan
'tsStart is 12:27:30
'tsEnd is 00:10:25
r = tsEnd.Subtract(tsStart).Duration()
'r = 12:17:05
TSENDはtsStart未満であるので、r = tsEnd.Subtract(tsStart)
は負の数をもたらすはずです。おそらく、あなたはtsStartのr = tsStart.Subtract(tsEnd)
からTSENDを減算したい、またはあなたの変数は、彼らがどうあるべきかの逆に設定されていますか?
あなたの状況に応じて、あなたがr = r.Duration()
の絶対値を返しますr
、呼び出したいことがあります。
あなたがラップの日を心配している場合は、日付をする必要があります - 。時間コンポーネントからだけで行っているどのように多くの日数を知るための方法はありません。
所属していません StackOverflow