método de resta volver TimeSpan TimeSpan negativo
Pregunta
Estos dos TimeSpan se almacenan en la base de datos con formato de 24 horas. Sin fecha, sólo 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)
'el r = -12: 17: 05
¿Hay algún método TimeSpan para obtener este derecho? Gracias.
Solución
Si sabe que tsEnd
siempre representa un punto posterior en el tiempo que tsStart
pero su base de datos no almacena las fechas, que puede resolver esto mediante la adición de 24 horas para el final, cuando el final es menor que el inicio (perdón por el C # sintaxis):
if (tsEnd < tsStart) {
r = tsEnd.Add(new TimeSpan(24, 0, 0)).Subtract(tsStart);
} else {
r = tsEnd.Subtract(tsStart);
}
Como jball señaló en los comentarios, esto supone que tsEnd
Nunca es tarde por más de un día, aunque no tenemos ninguna manera de determinar lo contrario.
Otros consejos
Si se utiliza el método Duración () en TimeSpan, se garantiza que su resultado es positivo, no importa el orden en que lo hace la resta en.
Por ejemplo:
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
TSEND es menor que tsStart, por lo r = tsEnd.Subtract(tsStart)
debería resultar en un número negativo. Tal vez usted quiere restar Tsend de tsStart r = tsStart.Subtract(tsEnd)
, o sus variables se están estableciendo a la inversa de lo que deberían ser?
Dependiendo de su situación es posible que desee llamar r = r.Duration()
, que devuelve el valor absoluto de r
.
Si usted está preocupado acerca de los días de envolver, necesitará la fecha -. No hay manera de saber cuántos días han pasado sólo por el componente de tiempo