1

这两个 TimeSpan 以 24 小时格式存储在数据库中。没有日期,只有时间跨度。

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 在评论中指出的那样,这假设tsEnd不会超过一天,尽管我们无法确定其他情况。

于 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 回答