Dans Ruby on Rails, Quelle est la différence entre DateTime, Timestamp, Time et Date?

d'après mon expérience, obtenir des dates/heures correctes alors que la programmation est toujours chargée de dangers et de difficultés.

Ruby et les Rails m'ont toujours échappé sur celle-ci, ne serait-ce qu'en raison du grand nombre d'options; je n'ai jamais la moindre idée de ce que je devrais choisir.

lorsque j'utilise des Rails et que je regarde les types de données ActiveRecord, je peux trouver ce qui suit

:datetime :horodatage, :temps,: date

et n'ont aucune idée de ce que sont les différences ou où se cachent les gotchas.

quelle différence? Que voulez-vous utiliser?

(P. M. j'utilise Rails3)

373
demandé sur Arslan Ali 2010-10-14 01:40:41

2 réponses

la différence entre les différents formats date/heure dans ActiveRecord a peu à voir avec les Rails et tout à voir avec n'importe quelle base de données que vous utilisez.

en utilisant MySQL comme exemple( si pour aucune autre raison 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 .

ainsi, vous demandez, ce qui est le la différence? Eh bien, certains d'entre eux sont auto-explicatif. DATE ne conserve qu'une date, TIME ne conserve qu'une heure de la journée, tandis que DATETIME conserve les deux.

la différence entre DATETIME et TIMESTAMP est un peu plus subtile: DATETIME est formaté comme YYYY-MM-DD HH:MM:SS . Plages valides vont de l'an 1000 à l'an 9999 (et tout entre les deux. Alors que TIMESTAMP ressemble similaire lorsque vous le récupérez à partir de la base de données, il est vraiment une façade pour un timestamp unix . Sa portée valide 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. Parce que DATETIME stocke chaque chiffre dans l'année, le jour du mois, l'heure, la minute et la seconde, il utilise un total de 8 octets. Comme TIMESTAMP ne stocke que le nombre de secondes depuis 1970-01-01, il utilise 4 octets.

Vous pouvez en savoir plus sur les différences entre les formats de temps dans MySQL ici .

à la fin, cela se résume à ce que vous avez besoin de votre date/heure colonne à faire. Devez-vous conserver les dates et les 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 vous êtes dans ce décalage horaire? Utilisez TIMESTAMP . Avez-vous seulement besoin de stocker une date? Utilisez DATE . Avez-vous seulement besoin de stocker une fois? Utilisez TIME .

Ayant dit tout ceci, Rails fait en fait certaines de ces décisions pour vous . :timestamp et :datetime seront par défaut à DATETIME , tandis que :date et :time correspond à DATE et TIME , respectivement.

cela signifie que dans les Rails, vous n'avez qu'à décider si vous devez stocker la date, l'heure ou les deux.

525
répondu vonconrad 2018-07-13 18:33:33
  1. :datetime (8 octets)

    • Stores date and Time formatted AAAA-MM-JJ HH: MM: SS
    • utile pour les colonnes comme birth_date
  2. : timestamp (4 octets)

    • nombre de secondes depuis 1970-01-01
    • utile pour les colonnes comme updated_at, created_at
  3. : date (3 octets)
    • Stocke La Date
  4. :le temps (3 octets)
    • Banques De Temps
4
répondu ninjarails 2017-10-13 03:13:42