¿Por qué Unix tiene su propio concepto de tiempo? ¿Cuál es la época y cuál es el problema de Y2038?
La hora Unix es un medio para representar una fecha y hora específicas, utilizada por Linux, macOS y muchos otros sistemas interoperables. Está tan extendido que probablemente lo esté utilizando sin darse cuenta. Sin embargo, una vez que comprenda el tiempo de Unix, lo detectará en muchos contextos. Varias herramientas pueden ayudarlo a trabajar con tiempo Unix.
¿Cuál es el propósito del tiempo Unix?
El tiempo Unix es un recuento de segundos totales desde una fecha y hora fija. Es un formato de fecha / hora (o marca de tiempo) que se ve diferente de las fechas y horas legibles por humanos a las que estamos acostumbrados. Esto es puramente por razones de eficiencia. Se necesita mucho menos espacio para almacenar un solo número que representa segundos que para almacenar valores separados para el año, mes, hora, etc.
Por supuesto, en términos modernos, la diferencia de espacio no es tanta. Pero considere que Unix se originó a fines de la década de 1960 cuando el almacenamiento disponible era mucho menor. Las marcas de tiempo también se usan mucho, por lo que su almacenamiento se acumula. Por ejemplo, cada archivo tiene tres marcas de tiempo asociadas.
El formato es prácticamente imposible de traducir en tu cabeza a menos que seas un genio matemático. Pero todavía tiene algunas ventajas sobre alternativas más legibles como Mié, 21 de Octubre de 2015 07:28:00 GMT. Puede solicitar dos marcas de tiempo Unix muy fácilmente, de un vistazo. También suele ser más rápido calcular la diferencia entre dos marcas de tiempo. Esto es particularmente cierto para fechas cercanas, como en días adyacentes.
Sobre la Época
Entonces, el tiempo de Unix es un recuento total de segundos desde un punto específico en el tiempo. Pero, ¿cuál es ese momento? Su 00:00:00 UTC en 1 de enero de 1970. Esto a menudo se conoce como la época de Unix. Los programadores eligieron esta fecha para la época por conveniencia, ya que era la fecha más cercana cuando inventaron la hora Unix.
Es posible que haya visto esta fecha cuando algo salió mal. Claramente es un error, pero se ve muy extraño cuando resulta en una fecha anterior a la época en que muchos de nosotros nacimos. Sin embargo, es completamente comprensible cuando conoces la época de Unix. Si algún sistema está intentando mostrar una marca de tiempo que no tiene ningún valor, a menudo se traducirá a 0 y dará como resultado la fecha de época exacta.
El formato de datos de tiempo de Unix
Estrictamente hablando, no hay ninguno. El tipo de datos original era un entero de 32 bits y, a menudo, este sigue siendo el caso, incluso en sistemas mucho más potentes.
Este tipo de datos permite que el valor almacene un total de 2 ^ 32 segundos, que es un poco más de 136 años. Este valor suele estar firmado, lo que significa que puede ser negativo o positivo. Por lo tanto, generalmente representa 68 años a cada lado de la época, es decir, 1902-2038.
Este es todavía un período limitado, por supuesto. Pero el uso principal del formato de marca de tiempo fue para conceptos como la modificación de archivos. La necesidad era mucho de representar el tiempo cercano al presente, en lugar de la historia antigua o el futuro lejano. Incluso para aplicaciones como calendarios, rara vez es necesario representar fechas de más de unas pocas décadas en el futuro.
Pero eso no significa que este período de tiempo limitado no tenga problemas...
El problema del año 2038
El error Y2K (uno de los peores errores de programación de la historia) sistemas informáticos afectados que almacenaban años como valores de dos dígitos. Cuando llegó el año 2000, tales sistemas lo trataron como si fuera 1900. Al final, esto no fue tan catastrófico como se temía, principalmente porque muchas personas dedicaron mucho tiempo y esfuerzo a prepararse para ello.
En su pasado histórico, la codificación también provocó destrucción. Las instancias de un poco de código incorrecto causaron un desastre a un nivel mayor. Los siguientes son 10 de los peores errores de programación de la historia.
Si prestaste atención en la sección anterior, es posible que hayas detectado un problema similar que podría afectar la hora de Unix. Bueno, la hora de Unix tiene un problema de datos propio: el problema Y2k38. (A menudo se lo denomina un problema, no un error; ¡Quizás nos hemos vuelto más optimistas desde el año 2000!) Cuando el tiempo de Unix literalmente se agote en 2038, los sistemas tratarán las nuevas fechas como 1902 o 1970. O posiblemente simplemente fallarán por completo.
Al menos este problema no nos golpeará al filo de la medianoche de la víspera de Año Nuevo. El último segundo del tiempo Unix de 32 bits caerá el 19 de marzo. En la eventualidad, es probable que actualice la mayoría de los sistemas para 2038 o, de todos modos, estarán obsoletos.
Algunos recursos útiles sobre marcas de tiempo
los Convertidor de época site es posiblemente el conversor de marcas de tiempo más completo disponible. Comienza mostrando la hora actual de Unix, en tiempo real, y agrega casi todas las funciones imaginables además de eso. Su uso principal es para convertir entre marcas de tiempo y fechas legibles por humanos, en ambas direcciones.
Dan's Tools es una gran colección de aplicaciones web útiles, una de las cuales es una convertidor de marca de tiempo. Es más básico, pero tiene una presentación muy limpia y es fácil de usar.
Tiempo es presenta otro aspecto aún más minimalista. Muestra la hora en varios formatos, incluida la hora Unix. Incluye la hora actual en el título de su página, lo cual es útil.
En Linux y macOS, el fecha El programa es la utilidad principal para lidiar con la fecha / hora, incluidas las marcas de tiempo de Unix. Llamado sin ningún argumento, devuelve la fecha / hora actual en un formato legible por humanos:
$ fecha
Mié 10 de febrero 12:28:30 GMT 2021
Si necesita la fecha / hora actual en tiempo Unix, use el +% s argumento:
$ fecha +% s
1612960114
Puede convertir una fecha legible por humanos en una marca de tiempo utilizando el -D marca si tu versión de fecha lo apoya. La mayoría de las versiones de Linux deberían, de forma predeterminada:
$ fecha -d "2 de enero de 1970" +% s
82800
En macOS, fecha es un programa diferente, que requiere un conjunto diferente de banderas:
$ fecha -j -f "% b% d% Y% T" "02 de enero de 1970 00:00:00" "+% s"
82800
Yendo en la otra dirección, puede convertir desde una marca de tiempo Unix usando el -r bandera:
$ fecha -r 1600000000
13 de septiembre de 2020 13:26:40 CEST
Algunos otros programas usan el %s formato para hacer frente a la hora Unix. Por ejemplo, si desea mostrar la fecha de modificación de un archivo en tiempo Unix, con el Versión de Linux de ls, puede utilizar lo siguiente:
$ ls -l --time-style = +% s index.tmp.html
-rw-r - r-- 1 ubuntu ubuntu 17862 1521649818 index.tmp.html
Cómo usar Unix Time en lenguajes de programación
PHP tiene la hora() función que devuelve la marca de tiempo actual de Unix. Su fecha() La función toma una marca de tiempo como segundo argumento:
$ php -r 'fecha de eco ("A-m-d", hora ());'
2021-02-11
JavaScript se acerca a las cosas de una manera interesante. Tiene un Date.now () método para obtener el número de milisegundos desde la época de Unix. Por supuesto, puede dividir esto por 1,000 y redondear el resultado para obtener el tiempo Unix equivalente en segundos:
> Math.floor (Date.now () / 1000)
1613083012
Entendiendo el tiempo de Unix
El tiempo Unix es un concepto simple que surge en muchos lugares. Una vez que lo entienda, puede que le resulte bastante útil, por ejemplo, al calcular las diferencias horarias. También puede reconocer cuándo puede ser la causa de ciertos errores.
Conceptos como la época y las marcas de tiempo son una parte importante para comenzar con Linux. Para obtener más información sobre elementos esenciales como ls, consulte nuestra guía de comandos básicos de Linux.
¿Quiere familiarizarse con Linux? Comience con estos comandos básicos de Linux para aprender las tareas informáticas estándar.
- Sin especificar
Bobby es un entusiasta de la tecnología que trabajó como desarrollador de software durante la mayor parte de dos décadas. Es un apasionado de los juegos, trabaja como editor de reseñas en Switch Player Magazine y está inmerso en todos los aspectos de la publicación en línea y el desarrollo web.
Suscríbete a nuestro boletín
¡Únase a nuestro boletín de noticias para obtener consejos técnicos, reseñas, libros electrónicos gratuitos y ofertas exclusivas!
Un paso más…!
Confirme su dirección de correo electrónico en el correo electrónico que le acabamos de enviar.