PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zeitrechnung, aber wie?



netmaster
22.10.04, 10:53
Hallo.

Bin gerade am Scripten und hänge etwas fest.
Ich habe eine Endzeit hh:mm:ss und soll davon eine bestimmte Dauer in Sekunden abziehen.
Zum Beispiel sowas in der Art:

13:02:17 (13 Uhr, 2 Minuten, 17 Sekunden)

Davon will ich nun 140 Sekunden subtrahieren.

13:02:17 minus 140 Sekunden = 12:59:57

Ich stehe da voll auf dem Schlauch. Kann mir einer da etwas auf die Sprünge,
wie ich sowas in der Shell scripten kann!
Die Uhrzeit und die Sekunden sind natürlich immer anders.

Big THX.

Batosai
22.10.04, 11:05
nimm zum rechnen timestamps und wandele die nur bei bedarf in ein lesbares format um.
Das macht vieles einfacher, dann kannste die 140 direkt abziehen.

gruß
Batosai

netmaster
22.10.04, 11:09
Geht leider nicht.
Die Uhrzeit und diese Sekunden zum abziehen bekomme ich so aus einem Programm.
Die will ich nun in einem eigen Script weiter bearbeiten.
Ich habe auch noch die Variable mit dem Datum.
01.11.2004 zum Beispiel.
Wenn du mir sagen könntest wie ich das ganze in einem timestamps umwandeln kann
und auch wieder in eine lesbares format bringe, wäre ich dir sehr dankbar.

ChiefRebelAngel
22.10.04, 11:18
Schau dir doch einfach mal die Funtion date an. Mit man date kommst du an die ganzen Optionen der Funktion ran. Vielleicht ist da ja was für dich dabei... Ansonsten würd ich sagen: nimm Perl anstelle von Shell ;)

Thaomir
22.10.04, 11:28
Du kannst die Variablen mit der Bash zerlegen. Beispiel:


zeit=13:02:17
# so bekommst du die Sekunde:
echo ${zeit##*:}
# so bekommst du die Stunde:
echo ${zeit%%:*}
# so bekommst du die Minute:
sub=${zeit%:*}
echo ${sub##*:}

Die Werte solltest du dann einfach umrechnen können.

Erklärung von Linuxfibel: http://www.linuxfibel.de/bash.htm#expansion
(Im Abschnitt Parameter- und Variablenexpansion)

netmaster
22.10.04, 11:36
@Chief
Das ist mir schon klar, aber ich will ja nicht das aktuelle Datum.
Was anderes habe ich mit date nicht hinbekommen, als mit dem aktuellen Datum zu arbeiten.

@Thaomir
Mit den einzelnen Variablen wird mein Script ja riesig.
Wenn abzuziehende Sekunden grösser als Sekunden von String,
dann mach noch Minuten minus eins.
Und sowas müsste ich dann komplett auf jeder "Ebene" durchführen.


Es muss doch etwas in der Art geben wie:

string="22.10.2004 12:35:00"
timestamp $string


EDIT: Habe einen Parameter bei date gefunden, habe ich wohl eben überlesen.

date -d "2004-10-22 12:55:00" +%s

Dies liefert mit den Timestamp von dem String.
Jetzt brauche ich nur noch eine Zeile, wie ich den Timestamp wieder in lesbare Ausgabe bekomme.

ChiefRebelAngel
22.10.04, 12:13
EDIT: Habe einen Parameter bei date gefunden, habe ich wohl eben überlesen.

date -d "2004-10-22 12:55:00" +%s

Dies liefert mit den Timestamp von dem String.
Jetzt brauche ich nur noch eine Zeile, wie ich den Timestamp wieder in lesbare Ausgabe bekomme.

Aus der man-Page:

%D date (mm/dd/yy)


hth

netmaster
22.10.04, 12:29
Aus der man-Page:

%D date (mm/dd/yy)


hth

Weis jetzt nicht, was du mir damit sagen willst.
wie soll ich das jetzt nutzen?

date timestamp %D oder was meinst du?
Ich versteh das nicht.
Schrieb mal bitte die Eingabe dabei. Danke.

ChiefRebelAngel
22.10.04, 12:47
abc@xyz:/# date -d "2004-10-22 12:55:00" +%d.%m.%y
22.10.04
abc@xyz:/#

netmaster
22.10.04, 12:54
Achso, das habe ich ja schon lange.
Habe ich doch oben geschrieben.
Ich suche jetzt noch die Umwandlung von timestamps ins lesbare Format.

ChiefRebelAngel
22.10.04, 13:29
abc@xyz:/# date=1098447417
abc@xyz:/# date +%d.%m.%y
22.10.04
abc@xyz:/#


Du musst zuerst das aktuelle Datum in einer Variable speichern.
Jetzt überschreib das Datum mittels date=timestamp
Nun formatiere dein Datum, wie du es brauchst: date +%d.%m.%y
Jetzt ändere wieder das Datum in das aktuelle Datum: date=DeineVariable

Alles klar?

netmaster
22.10.04, 13:57
Das geht aber bei mir nicht.

netmaster@linux:~> date=120
netmaster@linux:~> date +%d.%m.%y
22.10.04

Hier müsste aber 01.01.70 rauskommen.

ChiefRebelAngel
22.10.04, 14:05
Hm... 120 ist ja auch kein gültiges Datum... sondern nur zwei Minuten oder so... musst schon ein ganzes Datum benutzen. Würd ich jetzt mal so ganz spontan sagen...

netmaster
22.10.04, 14:44
Geht aber leider auch nicht.

netmaster@linux:~> date -d "2000-01-01 05:00:00" +%s
946699200
netmaster@linux:~> date=946699200
netmaster@linux:~> date +%d.%m.%y
22.10.04
netmaster@linux:~>

Jasper
22.10.04, 15:02
abc@xyz:/# date=1098447417
abc@xyz:/# date +%d.%m.%y
22.10.04
abc@xyz:/#




welche dateversion ist das die einen in einer variable namens date gespeicherten timestamp anzeigt? also meine und keine mir bekannte kann das.

$ date --version
date (sh-utils) 2.0.12
Geschrieben von David MacKenzie.


-j

Jasper
22.10.04, 15:18
Geht aber leider auch nicht.

netmaster@linux:~> date -d "2000-01-01 05:00:00" +%s
946699200
netmaster@linux:~> date=946699200
netmaster@linux:~> date +%d.%m.%y
22.10.04
netmaster@linux:~>

probiers damit. wenn dir awk nicht gefällt, nimm perl.

$ date -d "2000-01-01 05:00:00" "+%Y %m %d %H %M %S" | awk -v diff=140 '{ print strftime("%Y-%m-%d %H:%M:%S",mktime($0)-diff)}'
2000-01-01 04:57:40


-j

netmaster
22.10.04, 18:21
probiers damit. wenn dir awk nicht gefällt, nimm perl.

$ date -d "2000-01-01 05:00:00" "+%Y %m %d %H %M %S" | awk -v diff=140 '{ print strftime("%Y-%m-%d %H:%M:%S",mktime($0)-diff)}'
2000-01-01 04:57:40


-j

Du bist absolut der Held.
Das funtzt ja ohne Probleme.

1000 Dank.