Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Fecha en formato Bigint

Estas en el tema de Fecha en formato Bigint en el foro de Mysql en Foros del Web. Hola, Estoy accediendo a una base de datos MySql que tiene una tabla con un campo que es una fecha en formato bigint, me he ...
  #1 (permalink)  
Antiguo 10/11/2011, 04:47
 
Fecha de Ingreso: enero-2007
Mensajes: 6
Antigüedad: 17 años, 3 meses
Puntos: 0
Pregunta Fecha en formato Bigint

Hola,

Estoy accediendo a una base de datos MySql que tiene una tabla con un campo que es una fecha en formato bigint, me he bajado el dato aplicándole la función FROM_UNIXTIME(campo) pero lo que me da no me coincide con lo que tiene que ser.

Por ejemplo:

FROM_UNIXTIME(129653924254880000) me da 00/01/1900 00:00:00 y tiene que ser 10/11/2011 10:53:45
FROM_UNIXTIME(129653931093710000) me da 20/02/2001 21:33:52 y tiene que ser 10/11/2011 11:05:09

Como podéis ver, hay algunos casos en los que incluso me devuelve fechas que no existen.

¿Alguién me puede ayudar?


Saludos y gracias.
  #2 (permalink)  
Antiguo 10/11/2011, 09:10
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Fecha en formato Bigint

Cita:
Como podéis ver, hay algunos casos en los que incluso me devuelve fechas que no existen.
Eso sucede cuando desbordas un número...
No te olvides que el UNIXTIME tiene un límite de representación. Si lo excedes, dará cualquier cosa.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 12/11/2011, 04:02
 
Fecha de Ingreso: enero-2007
Mensajes: 6
Antigüedad: 17 años, 3 meses
Puntos: 0
Respuesta: Fecha en formato Bigint

La base de datos me la han dado ya con esos datos y no se que han hecho con las fechas pero no hay forma de convertirla a formato datetime, es como si le hubiesen sumado un timestamp o algo. ¿A nadie se lo ocurre algo?
  #4 (permalink)  
Antiguo 13/11/2011, 17:58
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Fecha en formato Bigint

Retomo el tema para hacerte un par de aclaraciones sobre tu problema.
El formato de fecha UNIX TIMESTAMP adolece de un problema que afectará a los sistemas en el año 2038, y que se origina en que los contadores internos de los sistemas de 32 bits usan un entero con signo de 32 its para realizar los calculos. Esto hace que el mayor número representable positivo sea 2147483647, que corresponde a un INT. Cuando se supera ese valor se produce un desborde y el número no puede representar la fecha.

Este asunto generará un fallo el 19/01/2038 a las 03:14:07, que hará colapsar todo sistema que trabaje en 32 bits. No hay soluciones para eso, más que migrar todo el software a 64 bits.
Se estima que para la llegada de esa fecha el software en uso será todo de 64 bits.
¿Nunca te intrigó por qué se están fabricando ultimamente sólo PCs de 64 bits...?
Bueno, esa es una de las razones fundamentales.

Como sea, el problema que tienes no es tal, es simplemente que estás tratando de manipular los datos con el rango incorrecto de enteros, o bien esos datos no son UNIXTIME reales, sino otra cosa.

Esto último se hace especialmente evidente cuando haces la conversión inversa: Ver qué numero le corresponde a la fecha que dices debería tener:
Código MySQL:
Ver original
  1. mysql> SELECT UNIX_TIMESTAMP('2011-11-10 10:53:45');
  2. +---------------------------------------+
  3. | UNIX_TIMESTAMP('2011-11-10 10:53:45') |
  4. +---------------------------------------+
  5. |                            1320933225 |
  6. +---------------------------------------+
  7. 1 row in set (0.00 sec)
Como puedes ver, a la fecha 10/11/2011 10:53:45 le corresponde el 1320933225 y no el 129653924254880000.
Código MySQL:
Ver original
  1. mysql> SELECT UNIX_TIMESTAMP('2011-11-10 11:05:09');
  2. +---------------------------------------+
  3. | UNIX_TIMESTAMP('2011-11-10 11:05:09') |
  4. +---------------------------------------+
  5. |                            1320933909 |
  6. +---------------------------------------+
  7. 1 row in set (0.00 sec)
Y a la fecha 10/11/2011 11:05:09 le corresponde 1320933909 y no 129653931093710000.

En otras palabras: Lo que crees que es, no es lo que realmente es... y ni siquiera se le parece.

Te sugiero que analices la fuente de datos y verifiques qué es lo que realmente está almacenando y cómo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 13/11/2011 a las 18:12

Etiquetas: fecha, formato, sql, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:30.