Cela vous donnera la date en secondes (depuis l'époque UNIX)
date --date '2017-08-17 04:00:01' +%s # "1502938801"
Et cela vous donnera la date sous forme de chaîne lisible à partir d'un certain nombre de secondes
date --date '@1502938801' # "17 Aug 2017 04:00:01"
Il suffit donc de convertir votre date/horodatage dans un format que GNU date
peut comprendre, utiliser les mathématiques pour déterminer la différence et afficher le résultat
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"
Nous n'avons pas fourni d'informations sur le fuseau horaire ici, il suppose donc le fuseau horaire local. Vos valeurs pour les secondes à partir de la date et de l'heure seront probablement différentes des miennes. (Si vos valeurs sont UTC, vous pouvez utiliser date --utc
.)
C'est facile avec datediff
commande fournie dans dateutils
forfait.
ddiff -i '%Y%m%d%H%M%S' 20170817040001 20160312000101