Archiv verlassen und diese Seite im Standarddesign anzeigen : Zeitrechnung, aber wie?
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.
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
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 ;)
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)
@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
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:/#
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?
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...
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:~>
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
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
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.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.