代码之家  ›  专栏  ›  技术社区  ›  Tola

TimeSpan减法返回负TimeSpan

  •  0
  • Tola  · 技术社区  · 16 年前

    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)
    

    是否有任何TimeSpan方法来实现这一点?非常感谢。

    3 回复  |  直到 16 年前
        1
  •  3
  •   Jeff Sternal    16 年前

    如果你知道的话 tsEnd 始终表示比指定时间晚的时间点 tsStart

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

    正如jball在评论中所指出的,这假设 特森德 永远不会迟一天以上,尽管我们无法确定是否迟一天。

        2
  •  1
  •   Edward Robertson    16 年前

    例如:

    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
    
        3
  •  0
  •   jball    16 年前

    tsEnd小于tsStart,因此 r = tsEnd.Subtract(tsStart) r = tsStart.Subtract(tsEnd) ,或者您的变量被设置为与应该设置的相反?

    根据您的情况,您可能需要打电话 r = r.Duration() ,它返回 r

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