这两个TimeSpan以24hr格式存储在数据库中。没有日期,只有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)‘'the r= -12:17:05
有没有什么TimeSpan方法可以解决这个问题呢?谢谢。
发布于 2009-12-10 03:40:08
如果您知道tsEnd总是表示比tsStart晚的时间点,但是您的数据库不存储日期,那么您可以通过在end小于start时向end添加24小时来解决这个问题(请原谅C#语法):
if (tsEnd < tsStart) {
r = tsEnd.Add(new TimeSpan(24, 0, 0)).Subtract(tsStart);
} else {
r = tsEnd.Subtract(tsStart);
}正如jball在评论中指出的那样,这假设tsEnd永远不会晚于一天,尽管我们无法确定是否有其他情况。
发布于 2009-12-10 03:39:15
如果你在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-10 03:35:10
tsEnd小于tsStart,因此r = tsEnd.Subtract(tsStart)应为负数。也许您想从tsStart r = tsStart.Subtract(tsEnd)中减去tsEnd,或者您的变量被设置为与它们应该相反的值?
根据您的情况,您可能希望调用r = r.Duration(),它返回r的绝对值。
如果您担心包装天数,则需要日期--仅从时间部分无法知道已经过去了多少天。
https://stackoverflow.com/questions/1876237
复制相似问题