GNU/Linux >> Znalost Linux >  >> Linux

Bash:vypočítá čas, který uplynul mezi dvěma časovými značkami

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

Linux
  1. Uložte do proměnné počet sekund, po které proces trval

  2. Tisk data pro pondělí aktuálního týdne (v bash)

  3. Jak zjistím rozdíl mezi dvěma daty pod bash

  1. Jak získat datum/čas vytvoření souboru v Bash/Debian?

  2. Bash skript pro výpočet uplynulého času

  3. Jaký je rozdíl mezi prováděním skriptu Bash a jeho získáváním?

  1. Dvě skvělá použití pro příkaz cp:Bash zkratky

  2. Jak získáte aktuální čas na serveru?

  3. Čas provedení více příkazů