Der Unterschied zwischen verschiedenen Datums- / Uhrzeitformaten in ActiveRecord hat wenig mit Rails zu tun und alles mit der von Ihnen verwendeten Datenbank.
Mit MySQL als ein Beispiel (wenn aus keinem anderen Grund , weil es beliebteste), haben Sie DATE, DATETIME, TIMEund TIMESTAMPSpaltendatentypen; so wie Sie haben CHAR, VARCHAR, FLOATund INTEGER.
Sie fragen sich also, was ist der Unterschied? Nun, einige von ihnen sind selbsterklärend. DATEspeichert nur ein Datum, TIMEspeichert nur eine Tageszeit, während DATETIMEbeide gespeichert werden.
Der Unterschied zwischen DATETIMEund TIMESTAMPist etwas subtiler: DATETIMEist formatiert als YYYY-MM-DD HH:MM:SS. Gültige Bereiche reichen vom Jahr 1000 bis zum Jahr 9999 (und alles dazwischen. Während es beim Abrufen aus der Datenbank ähnlich TIMESTAMP aussieht , ist es wirklich nur eine Front für einen Unix-Zeitstempel . Der gültige Bereich reicht von 1970 bis 2038. Der Unterschied Abgesehen von den verschiedenen integrierten Funktionen in der Datenbank-Engine ist hier Speicherplatz vorhanden. Da DATETIMEjede Ziffer in Jahr, Monat, Tag, Stunde, Minute und Sekunde gespeichert wird, werden insgesamt 8 Byte verbraucht. Da TIMESTAMPnur die Nummer gespeichert wird von Sekunden seit dem 01.01.1970 werden 4 Bytes verwendet.
Weitere Informationen zu den Unterschieden zwischen Zeitformaten in MySQL finden Sie hier .
Am Ende kommt es darauf an, wozu Sie Ihre Datums- / Zeitspalte benötigen. Müssen Sie Daten und Zeiten vor 1970 oder nach 2038 speichern? Verwenden Sie DATETIME. Müssen Sie sich Gedanken über die Datenbankgröße machen und befinden sich innerhalb dieses Zeitbereichs? Verwenden Sie TIMESTAMP. Müssen Sie nur ein Datum speichern? Verwenden Sie DATE. Müssen Sie nur eine Zeit speichern? Verwenden Sie TIME.
Nach alledem trifft Rails tatsächlich einige dieser Entscheidungen für Sie . Sowohl :timestampund :datetimewird standardmäßig zu DATETIME, während :dateund :timeentspricht DATEund TIMEjeweils.
Dies bedeutet, dass Sie innerhalb von Rails nur entscheiden müssen, ob Sie Datum, Uhrzeit oder beides speichern müssen.