DATETIME début DATETIME fin
Je vous implore d'utiliser à la place deux valeurs DATETIME , étiquetées quelque chose comme event_start et event_end .
Le temps est une affaire complexe
La plupart des pays du monde ont maintenant adopté le système métrique basé sur le denery pour la plupart des mesures, à tort ou à raison. C'est bien dans l'ensemble, car au moins nous pouvons tous convenir que ag, est un ml, est un cm cube. Du moins à peu près. Le système métrique a de nombreux défauts, mais au moins, il est systématiquement imparfait au niveau international.
Avec le temps cependant, nous avons; 1000 millisecondes dans une seconde, 60 secondes à une minute, 60 minutes à une heure, 12 heures pour chaque demi-journée, environ 30 jours par mois qui varient selon le mois et même l'année en question, chaque pays a son décalage horaire par rapport aux autres , la façon dont l'heure est formatée dans chaque pays varie.
C'est beaucoup à digérer, mais au bout du compte, il est impossible pour un scénario aussi complexe d'avoir une solution simple.
Certains coins peuvent être coupés, mais il y a ceux où il est plus sage de ne pas
Bien que la réponse principale ici suggère que vous stockez un nombre entier de minutes après minuit peut sembler parfaitement raisonnable, j'ai appris à éviter de le faire à la dure.
Les raisons d'implémenter deux valeurs DATETIME sont pour une augmentation de la précision, de la résolution et de la rétroaction.
Ceux-ci sont tous très pratiques lorsque la conception produit des résultats indésirables.
Est-ce que je stocke plus de données que nécessaire?
Il peut sembler initialement que plus d'informations sont stockées que ce dont j'ai besoin, mais il y a une bonne raison de prendre ce coup.
Stocker ces informations supplémentaires finit presque toujours par me faire gagner du temps et des efforts sur le long terme, car je constate inévitablement que lorsque quelqu'un est informé de la durée de quelque chose, il voudra également savoir quand et où l'événement a eu lieu.
C'est une énorme planète
Dans le passé, j'ai été coupable d'ignorer qu'il y a d'autres pays sur cette planète en dehors du mien. Cela semblait être une bonne idée à l'époque, mais cela a TOUJOURS entraîné des problèmes, des maux de tête et une perte de temps plus tard sur toute la ligne. Tenez toujours compte de tous les fuseaux horaires.
C #
Un DateTime se rend bien en une chaîne en C #. La méthode ToString (string Format) est compacte et facile à lire.
Par exemple
new TimeSpan(EventStart.Ticks - EventEnd.Ticks).ToString("h'h 'm'm 's's'")
Serveur SQL
De plus, si vous lisez votre base de données séparément de l'interface de votre application, il est agréable de lire dateTimes en un coup d'œil et d'effectuer des calculs dessus est simple.
Par exemple
SELECT DATEDIFF(MINUTE, event_start, event_end)
Norme de date ISO8601
Si vous utilisez SQLite, vous ne l'avez pas, alors utilisez plutôt un champ Texte et stockez-le au format ISO8601, par exemple.
"2013-01-27T12: 30: 00 + 0000"
Remarques:
Cela utilise une horloge de 24 heures *
La partie du décalage horaire (ou +0000) de l'ISO8601 correspond directement à la valeur de longitude d'une coordonnée GPS (sans tenir compte de l'heure d'été ou du pays).
Par exemple
TimeOffset=(±Longitude.24)/360
... où ± fait référence à la direction est ou ouest.
Il vaut donc la peine de se demander s'il vaudrait la peine de stocker la longitude, la latitude et l'altitude avec les données. Cela variera en application.
ISO8601 est un format international.
Le wiki est très bon pour plus de détails à http://en.wikipedia.org/wiki/ISO_8601 .
La date et l'heure sont enregistrées dans l'heure internationale et le décalage est enregistré en fonction de l'endroit dans le monde où l'heure a été stockée.
D'après mon expérience, il est toujours nécessaire de stocker la date et l'heure complètes, que je pense qu'il y en ait ou non au début du projet. ISO8601 est une très bonne façon de le faire.
Conseils supplémentaires gratuits
Cela vaut également la peine de regrouper les événements comme une chaîne. Par exemple, si vous enregistrez une course, l'événement entier pourrait être regroupé par coureur, race_circuit, circuit_checkpoints et circuit_laps.
D'après mon expérience, il est également judicieux d'identifier qui a conservé l'enregistrement. Soit en tant que table séparée remplie via un déclencheur, soit en tant que colonne supplémentaire dans la table d'origine.
Plus vous en mettez, plus vous en sortez
Je comprends parfaitement le désir d'être aussi économique que possible avec l'espace, mais je le ferais rarement au détriment de la perte d'informations.
Une règle de base avec les bases de données est, comme le titre l'indique, qu'une base de données ne peut vous en dire autant qu'elle contient des données, et il peut être très coûteux de parcourir les données historiques, en comblant les lacunes.
La solution est de le corriger du premier coup. C'est certainement plus facile à dire qu'à faire, mais vous devriez maintenant avoir une idée plus approfondie de la conception efficace de la base de données et avoir par la suite une chance beaucoup plus grande de bien faire les choses du premier coup.
Plus votre conception initiale est bonne, moins les réparations seront coûteuses par la suite.
Je dis seulement tout cela, parce que si je pouvais remonter le temps, c'est ce que je me dirais en arrivant là-bas.