Hola compañeros de la shell,
En esta entrada vamos a revisar como convertir fechas desde y hacia formatos de tiempo Unix epoch (que se definen como segundos desde 1970-01-01 00:00:00 UTC).
Si queremos saber la fecha hora actual en formato stantdard ejecutaremos el comando date:
date Sat Sep 14 17:35:02 CEST 2019
Si queremos saber la hora actual en tiempo de Unix ejecutaremos date +%s :
date +%s 1568478584
Para realizar conversiones entre fechas utilizaremos date -d o date –date:
1. Convertir epoch a fecha standard.
Para convertir la fecha desde el formato tiempo epoch al formato estándar tenemos dos formas, la primera es la más sencilla pero no funciona en todos los sistemas, especialmente si tienen un versión antigua de date, así que no olvidéis mirar también la segunda.
Método 1: date -d @epoch_time
date -d @1568478584 Sat Sep 14 18:29:44 CEST 2019
Método 2: date -d «1970-01-01 tiempo_epoch sec GMT»
date -d "1970-01-01 1568478584 sec GMT" Sat Sep 14 18:29:44 CEST 2019
2. Convertir fecha standard a epoch:
date -d ‘Fecha standard’ +%s
date -d 'Sat Sep 14 18:39:20 CEST 2019' +%s 1568479160
Si tenemos errores al ejecutar printf, ver:
Seguramente la variable de entorno del separador decimal será distinta a la que usa el número que pasamos como argumento a printf.
P.D.: Ojo, si la fecha en formato epoch incluye los milisegundos se obtienen valores incorrectos al realizar la conversion (fijarse en el año). Eliminando los tres últimos caracteres de la fecha se corrije este problema:
# Fecha en formato epoch precision milisegundos date -d @1624876144011 Tue Apr 10 22:26:51 CEST 53460 # Eliminando los 3 últimos caracteres de la fecha se corrije este problema date -d @1624876144 Mon Jun 28 12:29:04 CEST 2021
Espero que os sirva.
Nos vemos al otro lado de la pantalla negra.
