neues Datum durch Zeitangabe in sec berechnen

W

walid_de

Hallo,
wie kann man das neue Datum nach einer Zeitangabe in Sekunden berechnen?
Skript bekommt als Aufrufparameter eine lange Zahl in Sekunden und als Ergebniss soll er das neue Datum in Format (YYYY-MM-DD HH:MM) und zwar ab dem aktuellen Zeitpunkt liefern!
z.B:
- aktuelle Zeit: 2007-06-10 01:30
- ./myscript 3660
- Ausgabe neues Datum: 2007-06-10 02:31

Das Skript läuft auf HP_UX, AIX und SuSE Linux.

Danke und Gruß
Walid
 
Etwa in der Art:?
Code:
future=$(($(date "+%s") +400))
date -d @$future
 
vielleicht kannst du damit was anfangen?
hab ich im netz gefunden

[root@jacque tools]# perl datum.pl 1181500000
Tag: 10.06.2007 - Stunde:20:26:40

root@jacque tools]# perl datum.pl 1181503660
Tag: 10.06.2007 - Stunde:21:27:40


Code:
#!/usr/bin/perl

$timestamp = $ARGV[0];

print uhrzeit($timestamp)." ";

sub uhrzeit {
   ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
localtime($_[0]);
   $year += 1900;
   $mon++;
   if ($mon < 10) {
      $mon = "0$mon";
   }
   if ($mday < 10) {
      $mday = "0$mday";
   }
   return "Tag: ".$mday.".".$mon.".".$year." - Stunde:
".$hour.':'.$min.':'.$sec;
}
 
Perl:
perl -e 'printf("%04d-%02d-%02d %02d:%02d:%02d\n", sub {($_[5]+1900, $_[4]+1, $_[3], $_[2], $_[1], $_[0])}->( localtime(time + $ARGV[0]) ))' 120

perl -e 'use POSIX qw(strftime); print strftime "%D %T", localtime(time +$ARGV[0])' 120

Bash:
anzahlSekunden=120
echo $(date -d "01/01/1970 $(( $(date '+%s') + $anzahlSekunden )) sec")

Ohne temporären Kram:
Code:
echo $(date -d @$(( $(date "+%s") + 120 )) )
 
Zuletzt bearbeitet:
Das Skript läuft auf HP_UX, AIX und SuSE Linux.
Damit dürfte sich das Format %s erledigt haben.
Das kennt IMHO nur GNU date, was auf Suse zwar läüft, aber wohl weniger auf HP UX AIX.
Mit Perl ist das aber als Einzeiler sehr einfach.

Code:
perl -le 'print scalar localtime ($ARGV[0])' <hier der Timestamp>

Gruß Wolfgang
 
Das ist aber nicht was er will!
Er möchte Sekunden angebene, und daraus ein Datum in der Zukunft errechnen! Keinen Stamp!
perl -e 'printf("%04d-%02d-%02d %02d:%02d:%02d\n", sub {($_[5]+1900, $_[4]+1, $_[3], $_[2], $_[1], $_[0])}->( localtime(time + $ARGV[0]) ))' 120
 
Das ist aber nicht was er will!
Er möchte Sekunden angebene, und daraus ein Datum in der Zukunft errechnen! Keinen Stamp!

Achso, sorry missverstanden.
Aber auch das ist total unkompliziert:
Code:
perl -le 'print scalar localtime (time + $ARGV[0])' <SEKUNDEN>

Gruß Wolfgang
 
Jo Wolfgang genau, ich wollte einfach nur mal mit so ner Funktion formatieren, sorry. :) Also mit der anonymen sub *g* -> Spielerei.
 
Jo Wolfgang genau, ich wollte einfach nur mal mit so ner Funktion formatieren, sorry. :) Also mit der anonymen sub *g* -> Spielerei.

Man kann natürlich viel rumspielen. ;)
Aber mein Motto ist:
Einfache Aufgaben erfordern einfache Lösungen!

Hier ging es ja nicht um Perl selbst, sondern um eine klare Problemlösung.

Da es hier eigentlich um die Shell geht, ist Perl nur als portables Hilfsmittel zu verstehen.
Das soll OP ja auch verstehen.
Deshalb ist es sinnvoll, das möglichst einfach zu halten.

Natürlich kann die Ausgabe noch schön formatiert werden, das ist aber hier nicht erforderlich.

Nix für Ungut.
Gruß Wolfgang
 
Okay, sorry. :headup:
Bist du sicher, dass das Date von ihm kein +%s kann? Sonst könnte man auch eine Bash/SH Lösung von oben nehmen.
 
Okay, sorry. :headup:
Bist du sicher, dass das Date von ihm kein +%s kann? Sonst könnte man auch eine Bash/SH Lösung von oben nehmen.
Ich sagte schon, %s ist nicht portable, sondern nur für GNU date gültig.
Siehe hier.
Ob das hier auch gilt, kann keiner von uns beiden wissen. ;)

Gruß Wolfgang
 

Ähnliche Themen

Nur bestimmtes Format für Eingabe

Shell script

Maskiertes Suchen, Ersetzen und Rechnen in access.log vor weitere Bearbeitung

PHP: Timestring convertieren

Debian 6 Stable: ffserver "Ungültiger Maschinenbefehl"

Zurück
Oben