Question

Ces deux TimeSpan sont stockés dans la base de données au format 24hr. Aucune date, ne 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

Y at-il une méthode TimeSpan pour obtenir ce droit? Je vous remercie.

Était-ce utile?

La solution

Si vous savez que tsEnd représente toujours un point plus tard dans le temps que tsStart mais votre base de données ne stocke pas les dates, vous pouvez résoudre ce problème en ajoutant 24 heures à la fin quand la fin est inférieur au début (pardonnez le C # syntaxe):

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

Comme jball noté dans les commentaires, cela suppose que tsEnd est jamais plus tard, plus d'un jour, bien que nous ayons aucun moyen de déterminer autrement.

Autres conseils

Si vous utilisez la méthode Durée () sur TimeSpan, il garantit que votre résultat est positif, peu importe ce que vous faites pour la soustraction.

Par exemple:

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 est inférieur à tsStart, donc r = tsEnd.Subtract(tsStart) devrait se traduire par un nombre négatif. Peut-être que vous voulez soustraire TSEND de tsStart r = tsStart.Subtract(tsEnd) ou vos variables sont en cours réglée sur inverse de ce qu'ils devraient être?

En fonction de votre situation, vous pouvez appeler r = r.Duration(), qui renvoie la valeur absolue de r.

Si vous êtes inquiet jours d'emballage, vous aurez besoin de la date -. Il n'y a aucun moyen de savoir combien de jours se sont écoulés seulement de la composante temporelle

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top