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.

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top