La différence entre les différents formats de date et d'heure dans ActiveRecord a peu à voir avec Rails et tout à voir avec la base de données que vous utilisez.
En utilisant MySQL comme exemple (ne serait-ce que parce que c'est le plus populaire), vous avez DATE
, DATETIME
, TIME
et TIMESTAMP
types de données de colonne ; tout comme vous avez CHAR
, VARCHAR
, FLOAT
et INTEGER
.
Alors, demandez-vous, quelle est la différence ? Eh bien, certaines d'entre elles sont explicites. DATE
enregistre uniquement une date, TIME
ne mémorise qu'une heure de la journée, tandis que DATETIME
les deux magasins.
La différence entre DATETIME
et TIMESTAMP
est un peu plus subtile : DATETIME
est formaté comme suit YYYY-MM-DD HH:MM:SS
. Les plages valides vont de l'an 1000 à l'an 9999 (et tout ce qui se trouve entre les deux). Alors que TIMESTAMP
regarde similaire lorsque vous le récupérez dans la base de données, il s'agit en fait d'une façade pour un horodatage unix . Sa plage de validité va de 1970 à 2038. La différence ici, en dehors des diverses fonctions intégrées dans le moteur de base de données, est l'espace de stockage. Comme DATETIME
stocke tous les chiffres de l'année, du mois, du jour, de l'heure, des minutes et des secondes, ce qui représente un total de 8 octets. Comme TIMESTAMP
ne stocke que le nombre de secondes depuis le 01-01-1970, il utilise 4 octets.
Vous pouvez lire plus sur les différences entre les formats de temps dans MySQL ici .
En fin de compte, tout dépend de ce que vous voulez faire avec votre colonne de date et d'heure :
- Vous avez besoin de stocker des dates et des heures avant 1970 ou après 2038 ? => Utilisation
DATETIME
.
- Avez-vous besoin de vous soucier de la taille de la base de données et vous êtes dans cette fourchette de temps ? => Utilisation
TIMESTAMP
.
- Avez-vous seulement besoin de stocker une date ? => Utiliser
DATE
.
- Avez-vous seulement besoin de mémoriser une heure ? => Utiliser
TIME
.
Ayant dit tout cela, En fait, Rails prend certaines de ces décisions à votre place. . Les deux sites :timestamp
et :datetime
sera par défaut DATETIME
alors que :date
et :time
correspond à DATE
et TIME
respectivement.
Cela signifie qu'au sein de Rails, il vous suffit de décider si vous devez stocker la date, l'heure ou les deux.
0 votes
Je pense qu'une partie de la confusion vient aussi du fait que la
ActiveRecord
ne correspondent pas aux types Ruby (par ex.DateTime
) et Rails superpose même d'autres types (ex.TimeWithZone
).