Esto le dará la fecha en segundos (desde la época de UNIX)
date --date '2017-08-17 04:00:01' +%s # "1502938801"
Y esto le dará la fecha como una cadena legible de una cantidad de segundos
date --date '@1502938801' # "17 Aug 2017 04:00:01"
Entonces, todo lo que se necesita es convertir su fecha/marca de tiempo en un formato que GNU date
puede entender, usar matemáticas para determinar la diferencia y generar el resultado
datetime1=20170817040001
datetime2=20160312000101
seconds1=$(date --date "$(echo "$datetime1" | sed -nr 's/(....)(..)(..)(..)(..)(..)/\1-\2-\3 \4:\5:\6/p')" +%s)
seconds2=$(date --date "$(echo "$datetime2" | sed -nr 's/(....)(..)(..)(..)(..)(..)/\1-\2-\3 \4:\5:\6/p')" +%s)
delta=$((seconds1 - seconds2))
echo "$delta seconds" # "45197940 seconds"
No proporcionamos información sobre la zona horaria aquí, por lo que se asume la zona horaria local. Sus valores para los segundos de la fecha y hora probablemente serán diferentes a los míos. (Si sus valores son UTC, puede usar date --utc
.)
Esto es fácil con datediff
comando provisto en dateutils
paquete.
ddiff -i '%Y%m%d%H%M%S' 20170817040001 20160312000101