2008-09-17 27 views
6

J'ai des problèmes pour décider de la meilleure façon de gérer et de stocker les mesures de temps.Manipulation et stockage du temps écoulé

J'ai une application qui a une zone de texte qui permet aux utilisateurs de temps d'entrée soit hh: mm: ss ou mm: ss. J'ai donc prévu d'analyser cette chaîne, de la marquer sur les deux-points et de créer TimeSpan (ou d'utiliser TimeSpan.Parse() et d'ajouter un "00:" au cas mm: ss) pour ma logique métier. D'accord?

Comment puis-je conserver ce domaine comme dans une base de données bien? Quel serait le type de champ? DateTime semble faux. Je ne veux pas qu'un temps de 00:54:12 soit stocké comme 1901-01-01 00:54:12 qui semble un peu pauvre?

Répondre

8

TimeSpan a une propriété Int64 Ticks que vous pouvez stocker la place, et un constructor qui prend une valeur Tiques.

3

je pense est la plus simple de convertir simplement l'entrée d'utilisateur en un nombre entier de secondes. Donc 54:12 == 3252 secondes, alors rangez le 3252 dans votre base de données ou ailleurs. Ensuite, lorsque vous avez besoin de l'afficher à l'utilisateur, vous pouvez le convertir à nouveau.

3

Pour les périodes de moins d'un jour, il suffit d'utiliser quelques secondes que d'autres ont dit.

Pour des périodes plus longues, cela dépend de votre moteur db. Si SQL Server, avant la version 2008, vous voulez un datetime. C'est bon - vous pouvez simplement ignorer la date par défaut 1/1/1900 qu'ils auront tous. Si vous avez la chance d'avoir SQL Server 2008, vous pouvez utiliser des types de données Date et Heure distincts. L'avantage d'utiliser un type datetime/time réel est l'utilisation de la fonction DateDiff pour comparer les durées.

+0

pouces pour la solution multi-plateforme que vous avez fourni, indépendamment de tout langage de programmation ou base de données type de données spécifique; ) – morde

0

La plupart des bases de données ont une sorte de type d'intervalle de temps. La réponse dépend de la base de données dont vous parlez. Pour Oracle, il s'agit juste d'un nombre à virgule flottante représentant le nombre de jours (y compris les jours fractionnaires). Vous pouvez ajouter/soustraire cela à/de n'importe quel type de DATE et vous obtenez la bonne réponse.

0

Comme un nombre entier de secondes (ou Millisecondes selon le cas)

0

Collectez-vous à la fois l'heure de début et l'heure d'arrêt? Si c'est le cas, vous pouvez utiliser le type de données "horodatage" si votre SGBD le permet. Sinon, comme un type de date/heure. Maintenant, vous avez dit que vous ne voulez pas que la partie date soit stockée - mais considérez le cas où la période s'étend sur minuit - vous commencez à 23:55:01 et finissez à 00:05:14, par exemple - à moins que vous avez également la date là-bas. Il existe des fonctions intégrées standard pour renvoyer le temps écoulé (en secondes) entre deux valeurs date-heure.

0

Optez pour des entiers pendant quelques secondes ou minutes. Les secondes sont probablement meilleures. vous ne serez jamais à coup de pied pour avoir choisi quelque chose avec trop de précision. En outre, pour votre interface utilisateur, pensez à utiliser plusieurs entrées de texte, vous n'avez pas à vous soucier de l'utilisateur qui tape correctement le ":" correctement. Il est également beaucoup plus facile d'ajouter d'autres contraintes telles que les valeurs des minutes et des secondes contenant 0-59.