Tengo date (GNU coreutils) 7.1 instalado en mi sistema.
Si trato de verificar las fechas anteriores al 14 de diciembre de 1901, aparece un error de "fecha no válida". Por ejemplo,
$ date -d 1901-12-13
date: invalid date `1901-12-13'
$ date -d 1901-12-14
Sat Dec 14 00:00:00 EST 1901
¿Qué debo hacer para que la date
utilidad para tratar años anteriores a 1901 sea válida?
Recibo errores similares para fechas posteriores al 19 de enero de 2038
shell-script
date
Jasdeep Singh
fuente
fuente
Respuestas:
Buena pregunta.
La documentación dice que debería permitirse.
¿Estás en un sistema de 32 bits?
¿También obtiene un error con las fechas posteriores al 2038-01-20, p. Ej.
Si es así, parece que la fecha GNU está usando un valor de tiempo de 32 bits.
No estoy seguro de cómo puede solucionar esto aparte de usar un sistema de 64 bits o usar una herramienta diferente, por ejemplo, DateTime en Perl o datetime en Python.
Algunos antecedentes:
Los tiempos Unix cuentan el número de segundos desde el 1 de enero de 1970 utilizando un valor entero. Si el sistema usa números enteros de 32 bits, solo puede contar 2.100 millones de segundos hacia adelante (hasta 2038-01-19 03:14:02 UTC) y 2.100 millones de segundos hacia atrás (hasta 1901-12-13 20:45:52 UTC).
Mas información en:
fuente
uname
comando, excepto el hecho de que dice que es una máquina i686, que supongo que son máquinas de 32 bits. En cuanto al problema 2038, sí, ese problema existe de hecho en el servidor remoto. ¡Gracias de nuevo por tu aportación! ¡¡Muy apreciado!!Su sistema (o al menos esa versión de fecha ) probablemente esté utilizando un valor de tiempo interno de 32 bits.
La época de Unix (valor de tiempo cero) es 1970-01-01 00:00:00 UTC. Este punto de partida coloca 1901-12-13 00:00 EST justo fuera del rango de un valor de tiempo de 32 bits con signo.
1901-12-14 00:00:00 EST es -2147454000
1901-12-13 15:45:52 EST es -2147483648 (también conocido
INT_MIN
en C, el entero con signo mínimo de 32 bits)1901-12-13 00:00: 00 EST es -2147540400
Puede intentar usar 1901-12-13 15:45:52 EST. Debería funcionar, pero un segundo antes probablemente fallará de la misma manera que 1901-12-13 00:00.
fuente