Tím získáte datum v sekundách (od epochy UNIX)
date --date '2017-08-17 04:00:01' +%s # "1502938801"
A to vám dá datum jako čitelný řetězec od počtu sekund
date --date '@1502938801' # "17 Aug 2017 04:00:01"
Takže vše, co je potřeba, je převést vaše datum/časové razítko do formátu, který GNU date
dokáže porozumět, použít matematiku k určení rozdílu a vygenerovat výsledek
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"
Neposkytli jsme zde informace o časovém pásmu, takže předpokládá místní časové pásmo. Vaše hodnoty pro sekundy od datatime se budou pravděpodobně lišit od mých. (Pokud jsou vaše hodnoty UTC, můžete použít date --utc
.)
S datediff
je to snadné příkaz uvedený v dateutils
balík.
ddiff -i '%Y%m%d%H%M%S' 20170817040001 20160312000101
Proč se používá jak `make clean`, tak `make mrproper`?
Získejte více než 2 GB limit pro vytváření PDF pomocí ImageMagick