In Ruby on Rails, qual è la differenza tra DateTime, Timestamp, Ora e Data?

Nella mia esperienza, ottenere date / orari giusti quando la programmazione è sempre piena di pericoli e difficoltà.

Ruby e Rails mi hanno sempre eluso su questo, se non altro per il numero schiacciante di opzioni; Non ho mai avuto idea che dovrei scegliere.

Quando utilizzo Rails e guardo i tipi di dati ActiveRecord, posso trovare quanto segue

: datetime,: timestamp,: time e: date

e non hanno idea di quali siano le differenze o dove si nascondano i trucchi.

Qual è la differenza? Per cosa li usi?

(PS sto usando Rails3)

La differenza tra diversi formati di data / ora in ActiveRecord ha poco a che fare con Rails e tutto ciò che deve fare con qualunque database tu stia usando.

Usando MySQL come esempio (se non altro perché è più popolare), hai i tipi di dati della colonna DATE , DATETIME , TIME e TIMESTAMP ; proprio come tu hai CHAR , VARCHAR , FLOAT e INTEGER .

Quindi, chiedi, qual è la differenza? Bene, alcuni di loro sono auto-esplicativi. DATE memorizza solo una data, TIME memorizza solo un’ora del giorno, mentre DATETIME memorizza entrambi.

La differenza tra DATETIME e TIMESTAMP è un po ‘più sottile: DATETIME è formattato come YYYY-MM-DD HH:MM:SS . Gli intervalli validi vanno dall’anno 1000 all’anno 9999 (e tutto il resto. Mentre TIMESTAMP sembra simile quando lo si preleva dal database, è davvero solo un fronte per un timestamp unix . La sua gamma valida va dal 1970 al 2038. Il la differenza qui, a parte le varie funzioni integrate all’interno del motore di database, è lo spazio di archiviazione.Perché DATETIME memorizza ogni cifra nell’anno, nel mese giorno, ora, minuto e secondo, utilizza un totale di 8 byte. Come solo TIMESTAMP memorizza il numero di secondi dal 1970-01-01, utilizza 4 byte.

Puoi leggere di più sulle differenze tra i formati temporali in MySQL qui .

Alla fine, si tratta di quello che ti serve per la colonna data / ora. Hai bisogno di memorizzare date e orari prima del 1970 o dopo il 2038? Usa DATETIME . Hai bisogno di preoccuparti delle dimensioni del database e sei all’interno di quel timerange? Usa TIMESTAMP . Hai solo bisogno di memorizzare una data? Usa la data Hai solo bisogno di memorizzare un tempo? Usa TIME .

Detto questo, Rails in realtà prende alcune di queste decisioni per te . Entrambi :timestamp e :datetime verrà :datetime predefinito su DATETIME , mentre :date e :time corrisponde a DATE e TIME , rispettivamente.

Ciò significa che all’interno di Rails, devi solo decidere se è necessario memorizzare la data, l’ora o entrambi.

  1. : datetime (8 byte)

    • Memorizza data e ora formattati AAAA-MM-GG HH: MM: SS
    • Utile per colonne come birth_date
  2. : timestamp (4 byte)

    • Memorizza il numero di secondi dal 1970-01-01
    • Utile per colonne come updated_at, created_at
  3. : date (3 byte)
    • Data di negozio
  4. : tempo (3 byte)
    • Memorizza il tempo