web-dev-qa-db-fra.com

Dans Ruby on Rails, quelle est la différence entre DateTime, Horodatage, Heure et Date?

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)

397
Nick May

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.

549
vonconrad
  1. : date/heure (8 octets)

    • Stocke la date et l'heure formatées AAAA-MM-JJ HH: MM: SS
    • Utile pour les colonnes telles que birth_date
  2. : horodatage (4 octets)

    • Enregistre le nombre de secondes depuis le 01/07/1970.
    • Utile pour les colonnes comme updated_at, created_at
  3. : date (3 octets)
    • Date de magasins
  4. : heure (3 octets)
    • Temps de magasins
12
mingca