410 votos

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

Según mi experiencia, acertar con las fechas/horas a la hora de programar siempre está cargado de peligros y dificultades.

Ruby y Rails siempre me han eludido en este caso, aunque sólo sea por el abrumador número de opciones; nunca tengo idea de cuál debería elegir.

Cuando utilizo Rails y miro los tipos de datos de ActiveRecord puedo encontrar lo siguiente

:datetime, :timestamp, :time y :date

y no tengo ni idea de cuáles son las diferencias ni de dónde se esconden las trampas.

¿Cuál es la diferencia? ¿Para qué se utilizan?

(P.D. Estoy usando Rails3)

568voto

vonconrad Puntos 14378

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.

31voto

mingca Puntos 452
  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. :timestamp (4 bytes)

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

2voto

Aquí hay un impresionante y preciso explicación que he encontrado.

TIMESTAMP utilizado para rastrear los cambios de los registros, y actualizar cada vez que el registro se modifica. DATETIME se utiliza para almacenar un valor específico y estático que no se ve afectado por ningún cambio en los registros.

El TIMESTAMP también se ve afectado por los diferentes ajustes relacionados con la ZONA HORARIA. La FECHA es constante.

TIMESTAMP convierte internamente una zona horaria actual a UTC para su almacenamiento, y durante la recuperación convierte de nuevo a la zona horaria actual. DATETIME no puede hacer esto.

TIMESTAMP es de 4 bytes y DATETIME es de 8 bytes.

Rango de tiempo soportado: '1970-01-01 00:00:01′ UTC a '2038-01-19 03:14:07′ UTC Rango de fechas soportado: '1000-01-01 00:00:00′ a '9999-12-31 23:59:59′

fuente: https://www.dbrnd.com/2015/09/difference-between-datetime-and-timestamp-in-mysql/#:~:text=DATETIME%20vs%20TIMESTAMP%3A,DATETIME%20is%20constant .

Además...

con diferentes tipos de columna "fecha" y los correspondientes tipos de migración de Rails en función de la base de datos

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X