Dadurch erhalten Sie das Datum in Sekunden (seit der UNIX-Epoche)
date --date '2017-08-17 04:00:01' +%s # "1502938801"
Und das gibt Ihnen das Datum als lesbaren String aus einer Anzahl von Sekunden
date --date '@1502938801' # "17 Aug 2017 04:00:01"
Alles, was Sie also brauchen, ist, Ihren Datums-/Zeitstempel in ein Format umzuwandeln, das GNU date
unterstützt verstehen, den Unterschied mathematisch bestimmen und das Ergebnis ausgeben können
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"
Wir haben hier keine Zeitzoneninformationen bereitgestellt, daher wird von der lokalen Zeitzone ausgegangen. Ihre Werte für die Sekunden von datetime werden wahrscheinlich anders sein als meine. (Wenn Ihre Werte UTC sind, können Sie date --utc
verwenden .)
Mit datediff
geht das ganz einfach Befehl in dateutils
bereitgestellt Paket.
ddiff -i '%Y%m%d%H%M%S' 20170817040001 20160312000101