with strf rails month ruby-on-rails datetime date time timestamp

strf - En Ruby on Rails, ¿cuál es la diferencia entre DateTime, Timestamp, Time and Date?



time ruby on rails (2)

En mi experiencia, obtener fechas / horarios correctos cuando la programación siempre está llena de peligros y dificultades.

Ruby y Rails siempre me han eludido en este caso, aunque solo sea por la abrumadora cantidad de opciones; Nunca tengo ninguna idea de lo que debería elegir.

Cuando estoy usando Rails y observando tipos de datos de ActiveRecord puedo encontrar lo siguiente

: datetime,: timestamp,: time, y: date

y no tengo idea de cuáles son las diferencias o dónde se esconden los errores.

¿Cual es la diferencia? ¿Para qué los utiliza?

(PS estoy usando Rails3)


  1. : datetime (8 bytes)

    • Almacena la fecha y la hora con el formato AAAA-MM-DD HH: MM: SS
    • Útil para columnas como birth_date
  2. : marca de tiempo (4 bytes)

    • Almacena el número de segundos desde 1970-01-01
    • Útil para columnas como updated_at, created_at
  3. : fecha (3 bytes)
    • Fecha de tiendas
  4. : tiempo (3 bytes)
    • Tiempo de tiendas

La diferencia entre los diferentes formatos de fecha / hora en ActiveRecord tiene poco que ver con Rails y todo lo relacionado con cualquier base de datos que esté utilizando.

Utilizando MySQL como ejemplo (si no fuera por otro motivo porque es el más popular), tiene los tipos de datos DATE , DATETIME , TIME y TIMESTAMP ; así como tienes CHAR , VARCHAR , FLOAT e INTEGER .

Entonces, te preguntas, ¿cuál es la diferencia? Bueno, algunos de ellos son autoexplicativos. DATE solo almacena una fecha, TIME solo almacena una hora del día, mientras que DATETIME almacena ambos.

La diferencia entre DATETIME y TIMESTAMP es un poco más sutil: DATETIME tiene el formato YYYY-MM-DD HH:MM:SS . Los rangos válidos van desde el año 1000 hasta el año 9999 (y todo lo que está en medio. Aunque TIMESTAMP ve similar cuando se obtiene de la base de datos, en realidad es solo un frente para una marca de tiempo de Unix . Su rango válido va desde 1970 hasta 2038. La diferencia aquí, aparte de las diversas funciones integradas dentro del motor de base de datos, es el espacio de almacenamiento. Debido a que DATETIME almacena cada dígito en el año, mes, hora, minuto y segundo, usa un total de 8 bytes. Solo TIMESTAMP almacena el número de segundos desde 1970-01-01, utiliza 4 bytes.

Puede leer más sobre las diferencias entre los formatos de hora en MySQL here .

Al final, todo se reduce a lo que necesita que haga su columna de fecha / hora. ¿Necesita almacenar fechas y horas antes de 1970 o después de 2038? Use DATETIME . ¿Necesita preocuparse por el tamaño de la base de datos y está dentro de ese rango de tiempo? Utilice TIMESTAMP . ¿Solo necesitas guardar una fecha? Utilice la fecha. ¿Solo necesitas guardar un tiempo? Usa el tiempo

Habiendo dicho todo esto, Rails realmente toma algunas de estas decisiones por ti . Both :timestamp y :datetime se establecerán de forma predeterminada en DATETIME , mientras que :date y :time corresponde a DATE y TIME , respectivamente.

Esto significa que dentro de Rails, solo tiene que decidir si necesita almacenar la fecha, la hora o ambas.