首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TimeSpan subtract方法返回负TImeSpan

TimeSpan subtract方法返回负TImeSpan
EN

Stack Overflow用户
提问于 2009-12-10 03:30:29
回答 3查看 4.3K关注 0票数 0

这两个TimeSpan以24hr格式存储在数据库中。没有日期,只有TimeSpan。

代码语言:javascript
复制
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方法可以解决这个问题呢?谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-12-10 03:40:08

如果您知道tsEnd总是表示比tsStart晚的时间点,但是您的数据库不存储日期,那么您可以通过在end小于start时向end添加24小时来解决这个问题(请原谅C#语法):

代码语言:javascript
复制
if (tsEnd < tsStart) {
    r = tsEnd.Add(new TimeSpan(24, 0, 0)).Subtract(tsStart);
} else {
    r = tsEnd.Subtract(tsStart);
}

正如jball在评论中指出的那样,这假设tsEnd永远不会晚于一天,尽管我们无法确定是否有其他情况。

票数 3
EN

Stack Overflow用户

发布于 2009-12-10 03:39:15

如果你在TimeSpan上使用Duration()方法,它将保证你的结果是正的,不管你以什么顺序做减法。

例如:

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2009-12-10 03:35:10

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

根据您的情况,您可能希望调用r = r.Duration(),它返回r的绝对值。

如果您担心包装天数,则需要日期--仅从时间部分无法知道已经过去了多少天。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1876237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档