1

これら 2 つの 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 メソッドはありますか? ありがとうございました。

4

3 に答える 3

4

tsEndが常により後の時点を表していることがわかっているtsStartが、データベースに日付が保存されていない場合は、終了が開始よりも小さい場合に終了に 24 時間を追加することでこれを解決できます (C# 構文を許してください)。

if (tsEnd < tsStart) {
    r = tsEnd.Add(new TimeSpan(24, 0, 0)).Subtract(tsStart);
} else {
    r = tsEnd.Subtract(tsStart);
}

jball がコメントで指摘したように、これはtsEnd1 日以上遅れることはないと仮定していますが、そうでないと判断する方法はありません。

于 2009-12-09T19:40:07.957 に答える
1

TimeSpan で Duration() メソッドを使用すると、減算の順序に関係なく、結果が正であることが保証されます。

例えば:

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
于 2009-12-09T19:39:14.867 に答える
0

tsEnd は tsStart より小さいのでr = tsEnd.Subtract(tsStart)、負の数になるはずです。tsStart から tsEnd を減算したい場合r = tsStart.Subtract(tsEnd)や、変数が逆に設定されている場合がありますか?

r = r.Duration()状況によっては、 の絶対値を返すを呼び出すことができますr

折り返しの日数が気になる場合は、日付が必要です。時間の要素だけでは、何日経過したかを知る方法はありません。

于 2009-12-09T19:35:09.743 に答える