这两个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方法来做到这一点?谢谢。
答案 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
的绝对值。
如果你担心包裹日子,你需要约会日期 - 没有办法知道从时间组件开始已经过了多少天。