Question

Je ne parviens pas à décider quel est le meilleur moyen de gérer et de stocker les mesures de temps.

J'ai une application avec une zone de texte qui permet aux utilisateurs de saisir l'heure au format hh: mm: ss ou mm: ss.

Je comptais donc analyser cette chaîne, la marquer dans les deux points, créer TimeSpan (ou utiliser TimeSpan.Parse () et ajouter un "00:" à la casse mm: ss) pour ma logique métier. Ok?

Comment puis-je stocker cela comme dans une base de données? Quel serait le type de champ? DateTime semble faux. Je ne veux pas que l'heure 00:54:12 soit enregistrée sous le 1901-01-01 00:54:12 qui semble un peu pauvre?

Était-ce utile?

La solution

TimeSpan possède une ticks propriété Int64. pouvez stocker à la place et un constructeur prenant la valeur Ticks.

Autres conseils

Je pense que le plus simple consiste simplement à convertir les entrées utilisateur en un nombre entier de secondes. Donc, 54:12 == 3252 secondes, stockez donc le 3252 dans votre base de données ou ailleurs. Ensuite, lorsque vous devez l'afficher à l'utilisateur, vous pouvez le reconvertir.

Pour les périodes inférieures à un jour, utilisez simplement les secondes comme d’autres l’ont dit.

Pour des périodes plus longues, cela dépend de votre moteur de base de données. Si SQL Server, avant la version 2008, vous voulez une date / heure. C'est bon, vous pouvez simplement ignorer la date par défaut du 1/1/1900. Si vous avez la chance d'avoir SQL Server 2008, vous pouvez utiliser différents types de données Date et Heure. L’utilisation d’un type de date / heure réel présente l’avantage de pouvoir utiliser la fonction DateDiff pour comparer les durées.

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 ne s’agit que d’un nombre à virgule flottante qui représente le nombre de jours (y compris les fractions de jours). Vous pouvez ajouter / soustraire cela à / de n'importe quel type DATE et vous obtenez la bonne réponse.

En nombre entier de secondes (ou en millisecondes selon le cas)

Recueillez-vous l’heure de début et l’heure de fin? Si tel est le cas, vous pouvez utiliser l’option " timestamp " type de données, si votre SGBD le supporte. Si non, juste comme un type de date / heure. Maintenant, vous avez dit que vous ne voulez pas que la date soit stockée - mais considérons le cas où la période de temps s'étend sur minuit - vous commencez à 23:55:01 et finissez à 00:05:14, par exemple - à moins que vous avez aussi la date dedans. Des fonctions standard intégrées permettent de renvoyer le temps écoulé (en secondes) entre deux valeurs date-heure.

Choisissez des nombres entiers pour les secondes ou les minutes. Les secondes sont probablement meilleures. vous ne vous en tirerez jamais pour avoir choisi quelque chose avec trop de précision. En outre, pour votre interface utilisateur, envisagez d'utiliser plusieurs entrées de texte sans que l'utilisateur ait à s'inquiéter de la saisie du caractère ": " correctement. Il est également beaucoup plus facile d’ajouter d’autres contraintes telles que les valeurs minute et seconde contenant 0-59.

et le type int doivent le faire, en le stockant en secondes et en le parcourant d'avant en arrière

http://msdn.microsoft.com/en-us/library /ms187745.aspx

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