# [bash] Rechnen mit Datum und Uhrzeit?

## 3PO

Hallo Zusammen,

ich habe mir ein kleines Script gebastelt, das nachts per cronjob startet und diverse Arbeiten erledigt (Updates, Sicherungen, usw.).

Nun möchte ich aber gerne wissen, wie lange dazu gebraucht wird.

Im Moment sieht das so aus:

```
echo "beginn $date" > begin.log

--> Erledige o.g. Aufgaben... <--

echo "end $date" > end.log
```

Wie kann ich nun den Inhalt von begin.log und end.log vergleichen und daraus die Differenz ermitteln?

Das Ergebnis sollte dann z.B. so aussehen: Dauer: 22 min 12 sek

BTW:

Es muss nicht unbedingt so gemacht werden, ich bin über jeden Lösungsvorschlag dankbar.

----------

## toralf

```
date +%s
```

ist dein Freund und :

```
date -d @111111111
```

----------

## 3PO

Thx für den Tipp.

Ich habe es jetzt mal so gelöst:

```
START="$date +%s"

--> Erledige o.g. Aufgaben... <--

END="$date +%s"

(( DAUER= $END - $START )) 

echo 'Dauer: "$((DAUER /3600)) Std $((DAUER % 3600 /60)) Min $((DAUER % 60)) Sek"' >> udate.log
```

Was jetzt noch fehlt währe die Ausblendung von Stunden, wenn diese gleich Null sind.

Bsp:

22 Min 35 Sek statt 0 Std 22 Min 35 Sek

--> Aber das ist nur Kosmetik....   :Laughing: 

----------

## l3u

Vielleicht helfen dir die beiden, benutz ich in nem Script von mir:

```
# Transform a timestamp to a date

function formatTime

{

   awk "BEGIN { print strftime(\"%Y-%m-%d %H:%M:%S %Z\", \"$1\") }"

}

# Transform seconds to days, hours, minutes and seconds

function printSeconds

{

   # To make it work if we didn't have any downtime ;-)

   if [[ ! $1 ]]; then

      allSecs=0

   else

      allSecs=$1

   fi

   days=$(($allSecs / 86400))

   hours=$((($allSecs / 3600) - (days * 24)))

   minutes=$((($allSecs / 60) - (days * 1440) - (hours * 60)))

   seconds=$(($allSecs % 60))

   out=""

   if [[ $days -gt 0 ]]; then

      out="$days day"

      if [[ $days -gt 1 ]]; then out="${out}s"; fi

   fi

   if [[ $hours -gt 0 ]]; then

      if [[ "$out" != "" ]]; then out="$out, "; fi

      out="$out$hours hour"

      if [[ $hours -gt 1 ]]; then out="${out}s"; fi

   fi

   if [[ $minutes -gt 0 ]]; then

      if [[ "$out" != "" ]]; then out="$out, "; fi

      out="$out$minutes minute"

      if [[ $minutes -gt 1 ]]; then out="${out}s"; fi

   fi

   if [[ $seconds -gt 0 ]]; then

      if [[ "$out" != "" ]]; then out="$out, "; fi

      out="$out$seconds second";

      if [[ $seconds -gt 1 ]]; then out="${out}s"; fi

   fi

   if [[ "$out" == "" ]]; then

      out="0 seconds"

   fi

   echo -n $out

}
```

----------

## mv

Ein Alternative wäre die Benutzung des time-Kommandos.

----------

