D'après mon expérience, il est toujours dangereux et difficile d'obtenir des dates/heures correctes lors de la programmation.
Ruby et Rails m'ont toujours échappé à ce sujet, ne serait-ce qu'en raison du nombre impressionnant d'options; Je n'ai jamais aucune idée que je devrais choisir.
Lorsque j'utilise Rails et que je regarde les types de données ActiveRecord, je peux trouver les éléments suivants
: date/heure,: horodatage,: heure et: date
et n'avez aucune idée des différences ni de l'endroit où les pièges se cachent.
Quelle est la différence? A quoi les utilisez-vous?
(P.S. j'utilise Rails3)
La différence entre les différents formats de date/heure dans ActiveRecord a peu à voir avec Rails et avec tout ce que vous utilisez avec la base de données utilisée.
En prenant MySQL comme exemple (si ce n’est pour aucune autre raison, car il est très populaire), vous avez les types de données de colonne DATE
, DATETIME
, TIME
et TIMESTAMP
; tout comme vous avez CHAR
, VARCHAR
, FLOAT
et INTEGER
.
Alors, vous demandez, quelle est la différence? Eh bien, certains d'entre eux sont explicites. DATE
ne stocke qu'une date, TIME
ne stocke qu'une heure du jour, alors que DATETIME
enregistre les deux.
La différence entre DATETIME
et TIMESTAMP
est un peu plus subtile: DATETIME
est au format YYYY-MM-DD HH:MM:SS
. Les plages valides vont de l’année 1000 à l’année 9999 (et tout le reste). Bien que TIMESTAMP
soit semblable lorsque vous le récupérez dans la base de données, c’est vraiment un avant pour horodatage Unix . Son intervalle de validité va de 1970 à 2038. La différence, à part les diverses fonctions intégrées dans le moteur de base de données, réside dans l'espace de stockage. Parce que DATETIME
stocke chaque chiffre de l'année, du mois, de l'heure, des minutes et des secondes utilise 8 octets au total, étant donné que TIMESTAMP
ne stocke que le nombre de secondes écoulées depuis le 1970-01-01, il utilise 4 octets.
Vous pouvez en savoir plus sur les différences entre les formats de temps dans MySQL here .
En fin de compte, cela dépend de ce que vous devez faire avec votre colonne date/heure. Avez-vous besoin de stocker des dates et des heures avant 1970 ou après 2038? Utilisez DATETIME
. Avez-vous besoin de vous soucier de la taille de la base de données et êtes-vous dans ce délai? Utilisez TIMESTAMP
. Avez-vous seulement besoin de stocker une date? Utilisez DATE
. Avez-vous seulement besoin de stocker une heure? Utilisez TIME
.
Ceci dit, , Rails prend certaines de ces décisions pour vous . :timestamp
et :datetime
sont définis par défaut sur DATETIME
, tandis que :date
et :time
correspondent respectivement à DATE
et TIME
.
Cela signifie que dans Rails, il vous suffit de décider si vous devez stocker la date, l'heure ou les deux.
: date/heure (8 octets)
: horodatage (4 octets)