Domanda

Queste due TimeSpan sono memorizzate nel database con il formato 24 ore. Nessuna data, solo 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)

'r = -12: 17: 05

Esiste un metodo TimeSpan per ottenere questo diritto? Grazie.

È stato utile?

Soluzione

Se si sa che tsEnd rappresenta sempre un punto più avanti nel tempo rispetto tsStart, ma il database non memorizza le date, si può risolvere questo con l'aggiunta di 24 ore fino alla fine quando la fine è inferiore alla partenza (pardon il C # sintassi):

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

Come jball notato nei commenti, questo presuppone che tsEnd non è mai tardi per più di un giorno, anche se non abbiamo modo di decidere diversamente.

Altri suggerimenti

Se si utilizza il metodo Durata () su TimeSpan, si garantisce che il risultato è positivo, non importa in che ordine si fa la sottrazione in.

Ad esempio:

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 è inferiore tsStart, così r = tsEnd.Subtract(tsStart) dovrebbe tradursi in un numero negativo. Forse si vuole sottrarre TSEND da tsStart r = tsStart.Subtract(tsEnd), o le variabili sono essere impostato per il contrario di quello che dovrebbe essere?

A seconda della situazione si consiglia di chiamare r = r.Duration(), che restituisce il valore assoluto di r.

Se siete preoccupati per giorni da imballaggio, è necessario la data -. Non c'è modo di sapere quanti giorni sono passati proprio dalla componente temporale

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top