ubuntuusers.de

Zeitdifferenz berechnen

Status: Gelöst | Ubuntu-Version: Xubuntu 15.10 (Wily Werewolf)
Antworten |

PublicName

Anmeldungsdatum:
23. Oktober 2011

Beiträge: 85

Hi zusammen ☺,

ich müsste die Differenz von zwei Zeitdauern in einem Bash Skript berechnen. Einmal habe ich in FIRST_PARAMETER den als Beispiel dienenden Inhalt 10:00:05.00 und in SECOND_PARAMETER ebenfalls einen solchen Inhalt als Beispiel 40:00:11.00 (dieser ist immer größer als der erste). Dabei ist das Format hh:mm:ss.ms

Nun brauchte ich die Differenz zwischen den zwei Variablen ebenfalls in diesem Format.

Ein Beispiel:

1
2
3
4
5
6
7
FIRST_PARAMETER=10:00:05.00

SECOND_PARAMETER=40:00:11.00

RESULT=SECOND_PARAMETER - FIRST_PARAMETER

In RESULT sollte nun 30:00:06.00 gespeichert sein

Wenn mir hierbei jemand unter die Arme greifen könnte wäre das Spitze ☺.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17625

Wohnort: Berlin

1
2
3
4
5
fp=(${FIRST_PARAMETER//[:.]/ })
sp=(${SECOND_PARAMETER//[:.]/ })
d=($(for t in {0..3}; do  echo $((${sp[$t]}-${fp[$t]})); done))
echo ${d[@]}
30 0 6 0

Aus den Blanks wieder (Doppel-)punkte zu machen, eventuelle Unterläufe einrechnen und mit Nullen vorne zu füllen ist als eine Übung dem User überlassen.

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Da die Stunden auch mal größer als 24 sind, verschluckt sich die automatische Umrechnung von date daran. Also wirst Du es wohl ganz simpel mit Hand machen.

Ich würde aus Bequemlichkeit awk nehmen. Das Normalisieren ist in Deinem Falle recht einfach:

1
2
3
4
t1=10:01:05.20
t2=40:00:11.00
echo $t1:$t2  |  awk -F: '{d1=$4-$1; d2=$5-$2; d3=$6-$3; if(d3<0) {d2--; d3+=60}; if(d2<0) {d1--; d2+=60}; printf "%2.2i:%2.2i:%05.2f\n",d1,d2,d3}'
29:59:05.80

LG,

track

PublicName

(Themenstarter)

Anmeldungsdatum:
23. Oktober 2011

Beiträge: 85

Super danke euch ☺

Genau diese Extraktion habe ich gebraucht, vielen vielen Dank nochmal ☺

Antworten |