TimeSpan减法方法返回负TImeSpan

时间:2009-12-09 19:30:29

标签: vb.net 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方法来做到这一点?谢谢。

3 个答案:

答案 0 :(得分:2)

如果您知道tsEnd总是代表比tsStart更晚的时间点,但您的数据库不存储日期,您可以通过在结束时添加24小时来解决此问题少于开始(原谅C#语法):

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

正如jball在评论中指出的那样,这假设tsEnd永远不会超过一天,但我们无法另行确定。

答案 1 :(得分: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

答案 2 :(得分:0)

tsEnd小于tsStart,因此r = tsEnd.Subtract(tsStart)应该会产生负数。也许你想从tsStart r = tsStart.Subtract(tsEnd)中减去tsEnd,或者你的变量被设置为与它们应该的相反?

根据您的具体情况,您可能需要拨打r = r.Duration(),这会返回r的绝对值。

如果你担心包裹日子,你需要约会日期 - 没有办法知道从时间组件开始已经过了多少天。