La diferencia entre diferentes formatos de fecha/hora en ActiveRecord poco tienen que ver con Rieles y todo lo relacionado con cualquier base de datos que está utilizando.
Usando MySQL como un ejemplo (si no por otra razón, porque es más popular), ha DATE
, DATETIME
, TIME
y TIMESTAMP
tipos de datos de columna; tal como habéis CHAR
, VARCHAR
, FLOAT
y INTEGER
.
Entonces, se preguntará, ¿cuál es la diferencia? Bien, algunos de ellos son auto-explicativas. DATE
sólo almacena una fecha, TIME
sólo almacena una hora del día, mientras DATETIME
tiendas de ambos.
La diferencia entre los DATETIME
y TIMESTAMP
es un poco más sutil: DATETIME
está formateado como YYYY-MM-DD HH:MM:SS
. Válido rangos van desde el año 1000 hasta el año 9999 (y todo lo demás. Mientras TIMESTAMP
aspecto similar al recuperar de la base de datos, es realmente sólo una fachada para un timestamp de unix. Su rango va desde 1970 hasta 2038. La diferencia aquí, aparte de las varias funciones integradas en el motor de base de datos, es el espacio de almacenamiento. Porque DATETIME
tiendas de cada dígito en el año, mes, día, hora, minuto y segundo, que utiliza hasta un total de 8 bytes. Como TIMESTAMP
sólo se almacena el número de segundos desde 1970-01-01, utiliza 4 bytes.
Usted puede leer más acerca de las diferencias entre los formatos de tiempo en MySQL aquí.
Al final, todo se reduce a lo que usted necesita su columna de fecha/hora a hacer. ¿Necesita almacenar fechas y horas antes del 1970 o después de 2038? Uso DATETIME
. ¿Necesita preocuparse por el tamaño de la base y está dentro de las que timerange? Uso TIMESTAMP
. ¿Sólo necesita almacenar una fecha? Uso DATE
. ¿Sólo necesita almacenar un tiempo? Uso TIME
.
Habiendo dicho todo esto, Rieles en realidad hace que algunas de estas decisiones por usted. Tanto :timestamp
y :datetime
predeterminada es DATETIME
, mientras :date
y :time
corresponde a DATE
y TIME
, respectivamente.
Esto significa que dentro de Rieles, usted sólo tiene que decidir si usted necesita para almacenar la fecha, la hora o ambas.