D’après mon expérience, il est toujours dangereux et difficile d’obtenir des dates et des heures précises lors de la programmation.
Ruby et Rails m’ont toujours échappé sur ce coup, ne serait-ce qu’en raison du nombre écrasant 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:
: datetime,: timestamp,: time et: date
et n’ont aucune idée de ce que sont les différences ou où les pièges se cachent.
Quelle est la différence? A quoi les utilisez-vous?
(PS j’utilise Rails3)
La différence entre les différents formats de date / heure dans ActiveRecord a peu à voir avec Rails et tout ce qui concerne la firebase database que vous utilisez.
En utilisant MySQL comme exemple (si ce n’est pas parce qu’il est le plus 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
stocke uniquement une date, TIME
stocke uniquement une heure du jour, tandis que DATETIME
enregistre les deux.
La différence entre DATETIME
et TIMESTAMP
est un peu plus subtile: DATETIME
est formaté en YYYY-MM-DD HH:MM:SS
. Les plages valides vont de l’an 1000 à l’année 9999 (et tout entre les deux. Même si TIMESTAMP
est similaire lorsque vous le récupérez depuis la firebase database, il s’agit d’un simple timestamp Unix . Sa plage valide va de 1970 à 2038). La différence ici, hormis les diverses fonctions intégrées au moteur de firebase database, réside dans l’espace de stockage, car DATETIME
stocke chaque chiffre de l’année, du mois, de l’heure, des minutes et des secondes. stocke le nombre de secondes 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 ici .
En fin de compte, cela se résume à ce que vous avez besoin de 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 firebase database et vous êtes dans cette horloge? Utilisez TIMESTAMP
. Avez-vous seulement besoin de stocker une date? Utilisez DATE
. Avez-vous seulement besoin de stocker une heure? Utilisez le TIME
.
Après avoir dit tout cela, Rails prend certaines de ces décisions pour vous . Les deux :timestamp
et :datetime
par défaut à 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.
: datetime (8 octets)
: horodatage (4 octets)