GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo obtengo la diferencia entre dos fechas en bash?

Proponiendo esta solución que usa bc :

current="$(date +%s.%N)" #current date, precise to nanoseconds
old="$(date +%s.%N -d "$(sh some_script_that_gives_a_date.sh)")" #convert output to ns too
diff=$(echo "$current-$old" |bc)

date +%s.%N -d $1 toma una fecha arbitraria y la convierte a un formato dado (como en este caso +%s.%N , un float de segundos) . Tenga en cuenta que

-d no es parte de la fecha POSIX. [Pero] mientras [usted] no esté trabajando en distribuciones como Solaris ([OP] lo ha etiquetado como linux y no como unix) [usted] debería estar bien. :)

(comentario de jaypal singh sobre esta respuesta)

Para volver a convertirlo en legible por humanos, puede usar:
date $2 -d @0$diff #Pad diff with leading zero

Donde $2 de nuevo es un formato de fecha ver por ejemplo aquí


let DIFF=(`date +%s -d 20120203`-`date +%s -d 20120115`)/86400
echo $DIFF

Linux
  1. ¿La diferencia entre [[ $a ==Z* ]] y [ $a ==Z* ]?

  2. Obtenga la hora actual en segundos desde la Época en Linux, Bash

  3. Cómo obtener el estado de salida de un bucle en bash

  4. ¿Cómo obtener la fecha/hora de creación del archivo en Bash/Debian?

  5. ¿Cómo puedo obtener palabras entre las dos primeras instancias de texto/patrón?

Cómo obtener la fecha y hora actuales en Python

Cómo encontrar la diferencia entre dos directorios usando las herramientas Diff y Meld

¿Cómo hacer que el reloj muestre la fecha?

¿Cuál es la diferencia entre ejecutar un script Bash y obtenerlo?

Bash:calcula el tiempo transcurrido entre dos marcas de tiempo

¿Cómo eliminar archivos creados entre dos veces?