La marca de tiempo de época de Unix ahora (2014-04-09) es 1397071518. Por lo tanto, necesitamos un tipo de datos capaz de almacenar un número al menos tan grande.
¿Qué tipos de datos están disponibles?
Si se refiere a la PostgreSQL documentation on numeric types encontrará las siguientes opciones:
Name Size Minimum Maximum
smallint 2 bytes -32768 +32767
integer 4 bytes -2147483648 +2147483647
bigint 8 bytes -9223372036854775808 +9223372036854775807
¿Qué significa eso en términos de representación del tiempo?
Ahora, podemos tomar esos números y convertirlos en fechas utilizando un epoch converter:
Name Size Minimum Date Maximum Date
smallint 2 bytes 1969-12-31 1970-01-01
integer 4 bytes 1901-12-13 2038-01-18
bigint 8 bytes -292275055-05-16 292278994-08-17
Tenga en cuenta que, en última instancia, el uso de segundos te pone tan lejos en el pasado y el futuro que probablemente no importa El resultado que he dado es para si representas la época de Unix en milisegundos.
Entonces, ¿qué hemos aprendido?
smallint
es claramente una mala elección.
integer
es una opción decente por el momento, pero su software explotará en el año 2038. El apocalipsis Y2K no tiene nada en el Year 2038 Problem.
- El uso de
bigint
es la mejor opción. Esto es a prueba de futuro contra la mayoría de las necesidades humanas concebibles, aunque the Doctor todavía puede criticise.
Puede o no considerar si no sería mejor almacenar su marca de tiempo en otro formato como el ISO 8601 estándar.
Creo que puedo contrarrestarlo con un cheque para que se comporte como un número sin firmar. – ThinkingMonkey
hasta 2038 esto no es un problema :) – CyberDem0n
probablemente use bigint entonces. Pero no sería bueno almacenar los bits adicionales. – ThinkingMonkey