Questo ti darà la data in secondi (dall'epoca UNIX)
date --date '2017-08-17 04:00:01' +%s # "1502938801"
E questo ti darà la data come una stringa leggibile da un numero di secondi
date --date '@1502938801' # "17 Aug 2017 04:00:01"
Quindi tutto ciò che serve è convertire la tua data/timestamp in un formato che GNU date
può capire, usare la matematica per determinare la differenza e produrre il risultato
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"
Non abbiamo fornito informazioni sul fuso orario qui, quindi presuppone il fuso orario locale. I tuoi valori per i secondi dal datetime saranno probabilmente diversi dai miei. (Se i tuoi valori sono UTC, puoi usare date --utc
.)
Questo è facile con datediff
comando fornito in dateutils
pacchetto.
ddiff -i '%Y%m%d%H%M%S' 20170817040001 20160312000101